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
};