C++ 访问类的类 A类{ 公众: MyVec test;//问题错误:“MyVec”未命名类型 }; B类{ 公众: 模板 类MyVec{ //一些方法。。。 }; 私人: MyVec test1;//确定 };
编译器抱怨定义测试的行。C++ 访问类的类 A类{ 公众: MyVec test;//问题错误:“MyVec”未命名类型 }; B类{ 公众: 模板 类MyVec{ //一些方法。。。 }; 私人: MyVec test1;//确定 };,c++,class,C++,Class,编译器抱怨定义测试的行。MyVec的全名是B::MyVec。B::部分是可选的,当您在B中时,您在定义A之前没有定义或甚至没有声明MyVec。这使得类型不可能在A中使用。这是因为声明的顺序。B::MyVec test;//否则,它在全局命名空间中寻找MyVEC。您所发布的代码不是C++。请发布导致问题的真实代码。但这次它抱怨B没有类型。您需要更改文件中类的顺序:首先是B,然后是aOk,这是排序问题…将类a的定义移到类下面B@asami你被C++的编译模型咬了一口。一个C++编译器只做一次传递,即
MyVec
的全名是B::MyVec
。B::
部分是可选的,当您在B
中时,您在定义A之前没有定义或甚至没有声明MyVec
。这使得类型不可能在A中使用。这是因为声明的顺序。B::MyVec test;//否则,它在全局命名空间中寻找MyVEC。您所发布的代码不是C++。请发布导致问题的真实代码。但这次它抱怨B没有类型。您需要更改文件中类的顺序:首先是B,然后是aOk,这是排序问题…将类a的定义移到类下面B@asami你被C++的编译模型咬了一口。一个C++编译器只做一次传递,即“代码> b/COD>必须在<代码> < <代码> >之前声明,如果您想在<代码> < <代码>中使用<代码> B<代码>。我意识到一旦我发表评论:“但是这是一个两难的问题。”他在A中使用B::MyVec,这意味着它应该在A之前定义
Class A{
public:
MyVec<A> test; //problem error: ‘MyVec’ does not name a type
};
Class B{
public:
template<typename Obj>
Class MyVec{
//some methods...
};
private:
MyVec<A> test1; //ok
};