我遇到了一个我不明白的编译错误。 我有一个 h/cpp 文件组合,它不包含类,但只定义了一些实用函数。当我尝试使用在另一个类中定义的结构时,出现错误:
错误 C2027:使用了未定义的类型“B::C”
所以,归结为问题,h 文件看起来像这样
namespace A {
void foo(B::C::SStruct const & Var);
}
SStruct 的定义在一个类中,该类在另一个 h 文件中,当然包含在内。
namespace B {
class C {
public:
struct SStruct { };
};
}
奇怪的是,我可以在其他类中很好地使用这个结构,它似乎与这个只包含实用函数的 h 文件有关。 我在这里错过了什么? 谢谢!
最佳答案
在更正丢失的分号等之后编译:
namespace B {
class C {
public:
struct SStruct { };
};
}
namespace A {
void foo(B::C::SStruct const & Var);
}
显然,如果调换两个命名空间的顺序,这是行不通的。可能你的#including 标题顺序错误。如果这是错误,那就是糟糕的设计 - 您不应该让标题顺序影响您的代码。
关于C++编译错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2722650/