5

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

结构源.h

template <typename T>
class StructSource {
public:
    struct TestStruct{
        T value;
    };
};

用户.h

#include "StructSource.h"

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

        IntStruct *getIntStruct();

};

用户.cpp

#include "User.h"

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

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

User.cpp:3:1:错误:“IntStruct”没有命名类型

我不知道为什么会这样。我缺少什么类型的信息?

4

3 回答 3

11

“用户”也是一个“命名空间”(实际上,正如大多数评论者指出的那样,“命名空间”是为了快速回答),所以你必须使用

User::IntStruct *User::getIntStruct() {
    return 0;
}
于 2012-05-29T14:39:46.503 回答
5

你需要:

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

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

于 2012-05-29T14:37:59.877 回答
2

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

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

这与命名空间不同,尽管语法相同。

于 2012-05-29T14:45:29.047 回答