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

在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;
};

现在,下面是返回类型和参数类型都是结构的函数声明。 即使这些与上面没有什么不同,下面两个函数声明中的第一个函数声明(带有结构前缀的声明)给了我一个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);

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


除C以外,在C ++中,如果没有歧义,则可以省略struct (和class )关键字。 如果有歧义,您仍然必须使用struct关键字。 一个臭名昭着的例子是stat :有一个struct stat和一个函数stat 。 在这里,你总是必须使用struct stat来引用类型。


当你自己解释时,你似乎很了解。 在C ++中,关键字struct与关键字class相同,但默认为public而不是私有成员。 因此,在使用struct关键字声明一个类时,您不会在引用该类时再次使用它。 您似乎在尝试使用struct,因为它将在第一个示例中的C中使用。 这对于C ++来说是不同的。

链接地址: http://www.djcxy.com/p/15119.html

上一篇: I can't understand the structure declaration in c++

下一篇: JNLP, Webstart, and Maven