我遇到问题,而返回类型是结构
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
我可能知道为什么会出现这个错误
答案 0 :(得分:11)
您正在使用typedef
而未给该类型命名。只需删除typedef
,此处不需要:
struct connection_header {
string url;
string method;
};
接下来,connection_header
在Example
类中声明,因此当它是返回类型时,您需要在实现中完全限定其名称:
Example::connection_header Example::get_connection_header()
答案 1 :(得分:2)
在cpp
文件中尝试以下代码,在Example::
之前添加connection_header
:
Example::connection_header Example::get_connection_header() {
return NULL;
}
connection_header
在Example
内定义,因此您应该为其定义范围。
此外,在C ++中将忽略关键字typedef
。你可以省略它
答案 2 :(得分:1)
首先,在C ++(但不是C)中,每个struct
或class
都命名一个类型。因此,如果您声明struct connection_header
,则还会获得connection_header
类型,以便稍后可以声明connection_header var
某个变量。
然后,C和C ++中的typedef
都需要一个类型和一个名称。例如:
typedef long my_number_type;
将my_number_type
声明为long
正如其他人指出的那样,放弃typedef
答案 3 :(得分:0)
除了其他人的答案之外,我建议您不要嵌套数据结构的定义。在struct
connection_header
之上为Example
创建单独的外部class
。
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
。
答案 4 :(得分:0)
还有一个典型的问题,就是你使用了一个尚未声明的类型。如果您使用类型,请在使用前声明它们。