gpt4 book ai didi

c++ - gcc 的任何标签来编译包含 C 3rd 方头文件的 Cpp 文件

转载 作者:行者123 更新时间:2023-11-30 04:35:15 25 4
gpt4 key购买 nike

下面是第3部分头文件(header.h)定义了一个结构体a,把它当作C语言来编译就可以通过了。但是我们试图将这个文件包含在CPP文件中,编译失败是因为g++编译更多的限制还是其他原因?

shell@hercules$ g++ main.cpp
In file included from main.cpp:1:
header.h:10: error: conflicting declaration ‘typedef struct conn_t conn_t’
header.h:9: error: ‘struct conn_t’ has a previous declaration as ‘struct conn_t’
main.cpp: In function ‘int main()’:
main.cpp:8: error: aggregate ‘conn_t list’ has incomplete type and cannot be defined

头文件header.h:

 1  #ifndef __HEADER_H__
2 #define __HEADER_H__
3 #ifdef __cplusplus
4 extern "C" {
5 #endif
6 typedef struct
7 {
8 int data;
9 struct conn_t *next;
10 }conn_t;
11
12 #ifdef __cplusplus
13 }
14 #endif
15
16 #endif // __HEADER_H__

Cpp文件main.cpp

#include "header.h"
#include <iostream>

using namespace std;
int main()
{
conn_t list;
list.data = 1;
list.next = NULL;
cout<<"hello:"<<list.data<<endl;
return 0;
}

问题:有没有gcc/g++的tag可以编译呢?

最佳答案

typedef struct
{
int data;
struct conn_t *next;
}conn_t;

我不知道在某些编译器中您在此处所做的是否有效,但对我来说这似乎是错误的。如果您使用 typedef,则不应在类型名称前加上 struct。此外,在这种情况下,名称 conn_t 将在声明结构后立即定义,但在声明的内部 中无效。这样代码就可以工作了:

struct conn_t
{
int data;
struct conn_t *next;
};

没有 typedef,我只是使用结构名称。

关于c++ - gcc 的任何标签来编译包含 C 3rd 方头文件的 Cpp 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5509522/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com