0

我将抽象我的问题以避免包含不需要的细节,但如果需要,我可以提供源代码。我正在使用视觉工作室。

我有以下文件 - 所有头文件都有 #pragma 一次:

  • A.cpp //(包含我的主要功能)
  • 溴化氢
  • B.cpp //(不扮演任何角色)
  • 通道
  • C.cpp

以下是预处理器命令的设置方式:

A.cpp   #defines UseOptionOne
A.cpp   #includes B.h

B.h     #ifdef UseOptionOne   
            #defines Func as f1() //(calling a function that prints a msg)   
        #else                 
            #defines Func as [blank]  

A.cpp   #includes C.h
C.h     #includes B.h     // (B.h have #pragma once, so it doesnt get included again)

以下是函数调用的设置方式:

A.cpp   main function uses Func          //- It prints as intended 
A.cpp   calls function in C.cpp // this function does the following:
        {
           #ifndef UseOptionOne
             exit(0)                    //- Doesn't happen, so UseOptionOne is defined
           #endif   
           uses Func                        //- DOES NOTHING?????
        }
A.cpp   uses Func                       //- It prints as intended 

我不明白这怎么可能?确认 UseOptionOne 仍然在 Ch 中定义,但 Func 定义不同???

谁能解释一下?或者你想让我为你提供我相当复杂的解决方案或一些代码片段吗?

我真的迷路了:(

编辑:我已经使用断点来确认调用了 C.cpp 函数,'Func' 被简单地视为空白

EDIT2:由于缺乏声誉,我无法回答我自己的问题,所以我把它放在这里:
我创建了一个实现我的抽象描述的新项目,它确实触发了#ifndef 中的退出
所以你们中的任何人都无法用这个描述解决问题。我将不得不再次查看所有内容并找到错误/错误。

4

1 回答 1

2

我的两分钱:

UseOptionsOne 仅针对 A.cpp 和包含 Ah 的类定义:在您的情况下,它仅在 A.cpp 中定义

C.cpp 没有引用 Ah,所以它看不到定义。在这种情况下,UseOptionOne 没有在 C.cpp 中声明,它使用空白函数。

当您离开 C.cpp 的范围,并在 A.cpp 的范围内返回时,该函数起作用,因为在该范围内定义了 UseOptionOne。

如果您想在所有文件中使用定义,您可以创建一个单独的 definitions.h 头文件并将定义放入其中,然后将该文件包含在您希望定义对其起作用的所有头文件中。

于 2012-08-03T16:29:29.780 回答