Typdef from included file 'was not declared in this scope'
我正在尝试使用包含的头文件中已声明的typedef,但是出现以下错误:
1 2 3
| error: ‘Status’ was not declared in this scope
Status status;
^ |
在文件中包含的标头中声明typedef。
Server.hh(简体):
1 2 3 4 5
| class myClass {
public:
typedef mynamespace::Status Status;
...
} |
ClientServer.cc:
1 2 3
| #include"Server.hh"
...
Status status; // error thrown here |
这种方法有问题吗? 如何使typedef在多个文件中可用?
-
看起来您的typedef在类中。在这种情况下,名称的作用域仅限于类,而不是文件。
-
typedef前面的public:表示typedef在类范围内,因此您可能需要className::Status来获取typedef,但这仅是猜测。请提供一个最小的可复制示例
-
是的,你是对的。将typedef移到Server.hh中的类定义之外可修复该错误。谢谢!
-
@ user463035818您应该发布答案作为答案,这样才能被接受
-
@NicholasPipitone不是答案,而只是猜测。我也不同意目前应该回答的问题。应该通过添加缺少的信息(mcve)进行修复,或者将其关闭
-
@ user463035818 public:确实表明它在一个类中没有歧义,但我建议您进行编辑。
-
@NathanOliver首先提供了答案。你可以发表答案吗?
-
@tmath如果我是你,我只是删除问题。
-
我不认为这个问题值得删除,除非有重复的内容
typedef,using和namespace均位于编写该语句的代码块的本地。您必须将Server.hh重组为
1 2 3 4 5
| typedef mynamespace::Status Status;
class myClass {
public:
...
} |
供Server.cc访问,因为typedef将位于最外面的代码块中。
-
"代码块本地"有点误导,也许用"作用域"替换"代码块" ...(例如namespace foo { typedef int bar;} namespace foo { bar x;}是两个代码块,但只有一个作用域