头文件中声明的typedef在源文件中不可用

4

我有一个类myclass的定义,定义在头文件中,在private:部分有一个typedef


typedef int inttest;

我的源文件包括这个头文件,然而当我试图在源文件中使用typedef时,就像这样
inttest myclass::foo() { }

I get the error:

error: 'inttest' does not name a type

为什么会这样?我是否还需要在源文件中声明typedef

1
尝试使用myclass::inttest myclass::foo() {}。 - qeadz
1个回答

4

首先,typedef 在类的作用域中定义。因此,如果将其用作未限定名称作为返回类型,编译器将无法找到 typedef 的定义。您可以编写以下内容:

myclass::inttest myclass::foo() { }

然而编译器会再次发出错误,因为typedef被定义为私有。编辑:对不起,我错了,我展示的函数定义将被编译。然而,在调用该函数的代码中,你需要写入以下任一内容。
myclass a;

int i = a.foo();

或者

myclass a;

auto i = a.foo();

您可能不会编写

myclass a;

myclass::inttest i = a.foo();

我相信返回类型实际上在类范围内。 - kec

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接