结构没有在c ++中命名类型

Posted

技术标签:

【中文标题】结构没有在c ++中命名类型【英文标题】:structure does not name a type in c++ 【发布时间】:2013-03-13 07:23:44 【问题描述】:

返回类型为结构时出现问题

Example.h

class Example 
private:
    typedef struct connection_header 
        string url;
        string method;
    ;

    static connection_header get_connection_header();
;

Example.cpp
connection_header Example::get_connection_header() 
    return NULL;

我收到'connection_header' does not name a type

我可以知道为什么会出现这个错误

【问题讨论】:

您的下一个错误可能是no conversion from int to connection_headerNULL是什么类型的? @PeterWood 感谢我来自 java 的通知,所以我们通常可以这样做。我修复了这个问题 "X does not name a type" error in C++ 和 Class name does not name a type in C++ 的可能重复 【参考方案1】:

您正在使用typedef 而不给类型命名。直接删除typedef,这里不需要:

struct connection_header 
    string url;
    string method;
;

接下来,connection_headerExample 类中声明,因此当它是返回类型时,您需要在实现中完全限定其名称:

Example::connection_header Example::get_connection_header()

【讨论】:

我不认为这在 C++ 中是个好建议,你会希望结构表现得像类,而不需要在整个 plac 的对象名称前键入 struct 关键字. @Lundin 并不是到处都是。这是struct 的实际声明。 @Lundin,不,你错了。如今,结构只是一个具有不同默认可访问性规则的类。 @Lundin 那么您将无法真正使用 C++。是的,您可以在 C++ 中编写 C 的一个子集并将其编译为两者,但这是极其有限的。 @Lundin 对struct 使用C 样式声明class 不向后兼容。【参考方案2】:

首先,在 C++(但不是 C)中,每个 structclass 命名一个类型。所以如果你声明一个struct connection_header,你也会得到一个connection_header类型,所以你可以稍后声明connection_header var一些变量。

然后,typedef 在 C 和 C++ 中都需要类型和名称。例如:

 typedef long my_number_type;

my_number_type 声明为long 的同义词

正如其他人指出的那样,放弃typedef

【讨论】:

【参考方案3】:

cpp文件中尝试以下代码,在connection_header之前添加Example::

Example::connection_header Example::get_connection_header() 
    return NULL;

connection_header 是在Example 中定义的,所以你应该给它定义范围。

此外,关键字 typedef 在 C++ 中将被忽略。可以省略

【讨论】:

【参考方案4】:

除了别人的答案,我建议你不要嵌套你的数据结构的定义。在Exampleclass上方为connection_header创建一个单独的外部struct

Example.h

struct ConnectionHeader 
    string url;
    string method;
;

class Example 
private:
    ConnectionHeader connection_header;
    static ConnectionHeader get_connection_header();
;

这更容易调试,提供更好的可重用性,并且更容易预测auto 的结果。否则,只需使 urlmethod 成为 Example 的成员,并让 get_connection_header() 就地更新这些值,返回 void

【讨论】:

【参考方案5】:

还有一个典型的问题,就是你使用了一个尚未声明的类型。如果您使用类型,请在使用之前声明它们。

【讨论】:

以上是关于结构没有在c ++中命名类型的主要内容,如果未能解决你的问题,请参考以下文章

C++ 类 Typedef Struct 没有命名类型

没有命名成员的结构在哪里有用?

Golang 入门 : 结构体(struct)

C语言结构体用法

C语言结构体用法

c语言结构体用法