我无法理解c ++中的结构声明
I can't understand the structure declaration in 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
关键字。一个臭名昭著的例子是POSIX的stat
:有一个struct stat
和一个函数stat
。在这里,您总是必须使用struct stat
来引用类型。
当你自己解释时,你似乎理解得很好。在C++中,关键字结构与关键字类相同,但默认为public成员,而不是private成员。因此,在使用struct关键字声明了一个类之后,在引用该类时就不会再使用它了。您似乎在尝试使用struct,就像第一个例子中C中使用的那样。这与C++不同。
相关文章:
- 为什么 C++ 中的以下结构声明会导致退出 127?
- 在.cpp文件之间传递结构声明,而不使用全局头文件
- 结构声明中的 if 语句C++
- 这个嵌套结构声明是什么意思?
- 在结构声明的分号之前声明的结构变量是否为全局变量
- 为什么结构声明在C++中违反了 ODR
- 错误:多个文件中的结构声明冲突
- 为什么调用定义的构造函数会导致结构声明中出现错误,我该如何修复它
- C++数据结构声明
- 相互依赖的结构声明
- 结构声明的数组
- 结构声明中的":"是什么意思
- 面向C++的main.cpp中的可视化结构声明问题
- 当某些结构字段被省略或与结构声明中的顺序不同时,如何实现正确的解析?
- 编译器在转发结构声明上出错
- C++生成器 XE4 中的结构声明
- 我无法理解c ++中的结构声明
- 嵌套结构声明以及如何访问它们
- 将包含单个数组的结构声明为packed有什么缺点吗
- 定义之前的结构声明