【发布时间】:2016-01-27 04:55:07
【问题描述】:
我在编译以下代码时遇到错误 C2079,我不明白为什么。类 foo 稍后声明(前向声明)。
class foo;
//template <typename dataType>
class Toto
{
foo a; //C2079
};
class foo
{
public:
int x;
};
这个问题真正奇怪的是,如果我取消注释“模板行”(在类 Toto 声明之前),错误就会消失。我可以将其用作解决方法,但我不明白这里发生了什么。
根据我得到的第一个反馈,我尝试了以下代码:
class foo;
//template <typename dataType>
class Toto
{
foo *a; // solve C2079
void otherFunc()
{
a->myFunc(); // C2027
}
};
class foo
{
public:
int x;
void myFunc()
{
};
};
所以用指针“foo * a”替换“foo a”解决了编译错误。但是添加一个函数及其实现并调用“a->myFunc()”现在会产生“错误 C2027:使用未定义类型 'foo'”。是类似的问题吗?再次“模板”解决它。是的,我使用 MSVC 编译器。
【问题讨论】:
-
感谢 R Sahu 在此链接上指出我,但并不明显找到。是的,我认为我的案子已经涵盖在那里,我同意它是重复的。也许对 C2079 和 C2027 编译器错误的引用可能会更容易找到。