【发布时间】:2010-09-07 10:21:12
【问题描述】:
如果我这样创建一个类:
// B.h
#ifndef _B_H_
#define _B_H_
class B
{
private:
int x;
int y;
};
#endif // _B_H_
并像这样使用它:
// main.cpp
#include <iostream>
#include <vector>
class B; // Forward declaration.
class A
{
public:
A() {
std::cout << v.size() << std::endl;
}
private:
std::vector<B> v;
};
int main()
{
A a;
}
编译main.cpp 时编译器失败。现在我知道的解决方案是#include "B.h",但我很好奇它为什么会失败。在这件事上,g++ 或cl 的错误信息都不是很有启发性。
【问题讨论】:
-
注意你可以将
vector<T>传递给一个只有前向声明类型T的函数,如果你将它作为vector<T>&传递(但不是vector<T>,因为这需要复制操作) -
“编译器失败”...错误是什么?在哪一行?
-
一个很好的澄清请求,@Antonio,但当我在将近 13 年前发布这个问题时,我担心细节会漏掉。
-
我的猜测是错误出现在
v.size()行。老实说,就目前而言,这个问题最好删除。这为问题提供了更好的视角stackoverflow.com/questions/38898935/…