关于模板:C ++类Typedef Struct不命名类型

C++ Class Typedef Struct does not name a type

我试图在我的C++程序中使用TyBuffFrasts。我开始编写以下代码,直到在尝试向类中添加返回模板typedef结构指针的方法时收到错误。

结构源程序

1
2
3
4
5
6
7
template <typename T>
class StructSource {
public:
    struct TestStruct{
        T value;
    };
};

用户,h

1
2
3
4
5
6
7
8
9
#include"StructSource.h"

class User {
    public:
        typedef StructSource<int>::TestStruct IntStruct;

        IntStruct *getIntStruct();

};

用户协议

1
2
3
4
5
#include"User.h"

IntStruct *User::getIntStruct() {
    return 0;
}

这在使用gcc编译时会出现以下错误。

User.cpp:3:1: error: ‘IntStruct’ does not name a type

我无法解释为什么会这样。我缺少什么类型的信息?


"user"也是一个"namespace"(实际上,正如大多数评论者指出的那样,"namespace"是为了快速回答),因此您必须使用

1
2
3
User::IntStruct *User::getIntStruct() {
    return 0;
}


你需要:

1
User::IntStruct *User::getIntStruct() { ... }

intstruct在User作用域内定义,但函数的返回值不在作用域内。这里讨论了这些范围界定问题。


由于IntStruct是在类中定义的,所以必须使用类名引用它,除非在类代码中它是默认名称搜索路径的一部分。

1
User::IntStruct *User::getIntStruct() {

这与名称空间不同,即使语法相同。