编译错误,注释/debug/uncomment/debug在一行上消失
Compile error that goes away with comment/debug/uncomment/debug on a single line
下面是我的程序的头文件。我得到一个编译错误,说我在partyPack之前缺少分号。一个也不缺。还有两个错误,但我不记得是什么了。
真正让我困惑的是我注释掉了Pack partyPack;编译(失败,因为它在.cpp中被引用),当我取消注释并再次尝试时,它编译并运行。
什么会导致这种行为?
#ifndef PARTY_INTERFACE
#define PARTY_INTERFACE
#include "utility.h"
#include "Pack.h"
#include "Shop.h"
#include "Assets.h"
struct member
{...};
class Party
{
private:
const static int TEAMSIZE = 4;
member team[TEAMSIZE];
Pack partyPack;
const Inventory* itemList;
public:
Party(const Inventory* inputList);
void newTeam();
bool load();
bool save();
void findItem();
const void showParty();
const void showInventory();
void addToInventory();
~Party(void);
};
#endif
更新1 我已经能够重复这个错误了。下面是一个链接到github的repo,其中包含程序的文件供参考,请随意下载和调试等。最后一次提交编译为我在vc++ 2010。我已经注释掉了需要windows.h的部分,它应该普遍编译…我希望。
https://github.com/dsball/RPGShop/tree/master/RPGShop更新2 我已经将问题隔离到任何时候在Party.h或Party.h本身包含的头文件之一中更改了某些内容。输入a的简单行为;立即删除它(在这两个步骤之间没有任何内容)会导致错误。错误如下:
错误1 C2146:语法错误:标识符"partyPack"前缺少";"
错误2错误C4430:缺少类型说明符-假定为int。注意:c++不支持default-int party.h 30
错误3错误C4430:缺少类型说明符-假定为int。注意:c++不支持default-int party.h 30
然后我在Pack.h//Pack partyPack中注释第30行,编译/开始调试(失败),取消注释同一行并再次尝试,它运行得很好。
更新3 在学习有Pack() pragma后,我已经将Pack替换为Backpack,但问题仍然相同。
正如其他人提到的,似乎有什么东西干扰了Party的定义,但我找不到它是什么
(在以后的版本中,pack已重命名为backpack。这个答案用'backpack'代替'pack')
在g++下编译时(经过适当的修改以删除特定于windows的代码),我得到这个错误:
$ g++ -std=c++0x *.cpp
In file included from Shop.h:6:0,
from Backpack.h:5,
from Backpack.cpp:1:
Party.h:30:2: error: ‘Backpack’ does not name a type
看起来问题是Backpack.h包含了party.h,但是在Backpack.h的第5行,Backpack类还没有被定义。Party.h在它的第5行包含了Backpack.h,但是因为Backpack.h已经被包含了,所以#ifndef语句阻止了Backpack.h第二次被包含(否则会创建一个#include语句的无限循环)。
总之,这个问题看起来是由于循环依赖。我会想办法打破Backpack.h和Party.h之间的依赖循环。
就为什么这是片状的而言,我猜VC缓存满载头作为优化。如果Backpack.h是完全加载的,那么这个错误就不会发生
最可能的包未定义。但是有一个标头可能定义了它,所以…它是否定义在另一个名称空间中?(您可能需要使用显式的名称空间定位符,如pack_namespace::Pack partyPack;)
- 用c++从输入文件中读取另一行
- 读取文件的最后一行并输入到链接列表时出错
- 我正在使用嵌套的while循环来解析具有多行的文本文件,但由于某种原因,它只通过第一行,我不知道为什么
- 从C++dll访问C#中的一行主要参数
- 在C++中,我如何接受不同于同一行的用户输入
- 如何从一行中读取特定数量的字符?(C++)
- 读取最后一行代码算法 - c++ 时出现问题
- 查找矩阵C++中每一列和每一行的最小和最大元素
- 有没有办法在一行中填充矢量图
- 需要将一行代码从C++ Qt翻译成PyQt
- 可视化C++:发布模式的运行时库作为'Multi-threaded Debug DLL'
- 为什么如果我添加这一行,我的程序会不断询问值
- 如何使代码打印文本文件中的第一行?
- 如何在C++中以这种方式返回一行文本?
- 如何使用运算符在同一行中多次调用函数
- LNK1104:无法打开libpjproject-i386-Win32-vc14-Debug-Static.lib
- 如何格式化我的文本文件以使其不会一遍又一遍地重复同一行?
- 在 Boost::fiber 中引发的BOOST_ASSERT故障 Visual Studio "Debug" 构建
- 而(!inputfile.eof())只读取第一行?
- 编译错误,注释/debug/uncomment/debug在一行上消失