我将抽象我的问题以避免包含不需要的细节,但如果需要我可以提供源代码。我正在使用visual studio。
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仍然在C.h中定义,但Func的定义不同???
任何人都能解释一下吗?或者您希望我为您提供我相当复杂的解决方案或一些代码片段?
我真的输了:(
编辑:我使用断点来确认调用了C.cpp函数,'Func'被简单地视为空白
EDIT2:由于缺乏声誉,我无法回答我自己的问题,所以我把它放在这里:
我创建了一个实现我的抽象描述的新项目,它确实触发了#ifndef中的退出
因此,您无法通过此描述解决问题。我只需要再次查看所有内容并找出错误/错误。
答案 0 :(得分:2)
我的两分钱:
UseOptionsOne仅为A.cpp和包含A.h的类定义:在您的情况下,它仅在A.cpp中定义
C.cpp没有引用A.h,所以它没有看到定义。在这种情况下,UseOptionOne未在C.cpp中声明, 它使用空白功能。
当你离开C.cpp的范围,并返回A.cpp的范围时,该函数可以工作,因为在该范围内 已定义UseOptionOne。
如果要在所有文件中使用define,可以创建一个单独的definitions.h标头并放入其中 定义,然后将该文件包含在您希望定义工作的所有标头中。