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

时间:2013-03-13 07:23:44

标签: c++ struct compilation

我遇到问题,而返回类型是结构

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

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

5 个答案:

答案 0 :(得分:11)

您正在使用typedef而未给该类型命名。只需删除typedef,此处不需要:

struct connection_header {
    string url;
    string method;
};

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

Example::connection_header Example::get_connection_header()

答案 1 :(得分:2)

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

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

connection_headerExample内定义,因此您应该为其定义范围。

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

答案 2 :(得分:1)

首先,在C ++(但不是C)中,每个structclass都命名一个类型。因此,如果您声明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成员Exampleget_connection_header()就地更新这些值,然后返回void

答案 4 :(得分:0)

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