我无法理解c ++中的结构声明

7 c c++ struct structure class

在C中,每当我们想要声明或定义结构时,我们必须使用结构前缀.但是,一旦结构成为c ++中的一类,事情就会发生变化.我们struct在声明结构时不再需要使用前缀.在这种情况下,我猜结构标签C成为了一个类型的名称C++.

但是,这并不意味着我们不能使用struct前缀.我们仍然可以使用struct前缀.例如,c ++的创建者Bjarne Stroustrup介绍了一个声明带有和不带struct前缀的结构的例子,这让我感到困惑.

下面是尝试使用模板参数T创建结构的结构定义.这些编译正常,没有错误.

template<class T> struct linked_list {
    T element;
    linked_list<T> *next;
};
template<class T> struct linked_list {
    T element;
    struct linked_list<T> *next;
};
Run Code Online (Sandbox Code Playgroud)

现在,下面是函数声明,其返回类型和参数类型是结构.即使这些与上面没有什么不同,第一个从下面的两个函数声明,一个带结构前缀,给我一个错误的Visual Studio c ++ 2012

template<class T> struct linked_list<T> *add_list(T element, struct linked_list<T> *tail);
template<class T> linked_list<T> *add_list(T element, linked_list<T> *tail);
Run Code Online (Sandbox Code Playgroud)

我真的不明白事情是如何运作的.我不明白这些声明之间的区别.谁能给我一个详细的解释?

Jen*_*edt 3

除了 C 语言之外,在 C++ 中,如果没有歧义,可以省略struct(and ) 关键字。如果存在歧义,您仍然必须使用关键字。一个臭名昭著的例子是 POSIX' :有 a和 a function 。在这里你总是必须使用来引用类型。classstructstatstruct statstatstruct stat