15

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

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

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

4

5 回答 5

17

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

struct connection_header {
    string url;
    string method;
};

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

Example::connection_header Example::get_connection_header()
于 2013-03-13T07:25:27.540 回答
3

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

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

 typedef long my_number_type;

声明my_number_type为同义词long

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

于 2013-03-13T07:25:39.133 回答
3

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

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

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

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

于 2013-03-13T07:26:09.177 回答
0

除了其他人的答案,我建议您不要嵌套数据结构的定义。structconnection_header上面创建一个单独的外部Example class

Example.h

struct ConnectionHeader {
    string url;
    string method;
};

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

这更容易调试,提供更好的可重用性,并且更容易预测auto. 否则,只需 makeurlmethod的成员Exampleget_connection_header()就地更新这些值,返回void.

于 2018-04-06T21:41:35.697 回答
0

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

于 2021-01-11T13:07:31.250 回答