结构没有在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_header
。 NULL
是什么类型的?
@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_header
在 Example
类中声明,因此当它是返回类型时,您需要在实现中完全限定其名称:
Example::connection_header Example::get_connection_header()
【讨论】:
我不认为这在 C++ 中是个好建议,你会希望结构表现得像类,而不需要在整个 plac 的对象名称前键入struct
关键字.
@Lundin 并不是到处都是。这是struct
的实际声明。
@Lundin,不,你错了。如今,结构只是一个具有不同默认可访问性规则的类。
@Lundin 那么您将无法真正使用 C++。是的,您可以在 C++ 中编写 C 的一个子集并将其编译为两者,但这是极其有限的。
@Lundin 对struct
使用C 样式声明在class
内 不向后兼容。【参考方案2】:
首先,在 C++(但不是 C)中,每个 struct
或 class
命名一个类型。所以如果你声明一个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】:除了别人的答案,我建议你不要嵌套你的数据结构的定义。在Example
class
上方为connection_header
创建一个单独的外部struct
。
Example.h
struct ConnectionHeader
string url;
string method;
;
class Example
private:
ConnectionHeader connection_header;
static ConnectionHeader get_connection_header();
;
这更容易调试,提供更好的可重用性,并且更容易预测auto
的结果。否则,只需使 url
和 method
成为 Example
的成员,并让 get_connection_header()
就地更新这些值,返回 void
。
【讨论】:
【参考方案5】:还有一个典型的问题,就是你使用了一个尚未声明的类型。如果您使用类型,请在使用之前声明它们。
【讨论】:
以上是关于结构没有在c ++中命名类型的主要内容,如果未能解决你的问题,请参考以下文章