gpt4 book ai didi

c++ - C++ 中的冲突声明

转载 作者:太空宇宙 更新时间:2023-11-04 14:38:57 25 4
gpt4 key购买 nike

我有一个cpp文件如下:

#include <iostream> 

#include "i.h"

using namespace std;

typedef struct abc{
int a1;
int b1;
} abc_t, *abc;

void fun(abc x){
cout<<x->a1;
}

int main(){
abc val;
fun(val);
return 0;
}

i.h 文件:

struct abc;

void fff(struct abc);

当我编译代码时出现以下错误:

t.cpp:8: error: conflicting declaration ‘typedef struct abc* abc’

t.cpp:5: error: ‘struct abc’ has a previous declaration as ‘struct abc’

t.cpp: In function ‘void fun(abc)’:

t.cpp:11: error: base operand of ‘->’ has non-pointer type ‘abc’

如果我将 cpp 文件保存为 c 文件并使用 c 编译器进行编译,那么一切正常。C++ 编译器有什么问题?

最佳答案

您已使用 typedefabc 声明为结构和指向结构的指针。这和做的一样:

struct abc {...};
typedef abc abc_t; // ok, abc_t is now an alias for abc
typedef abc *abc; // error

跳过 typedefabc_t*abc 并使用类(默认情况下所有成员都是公共(public)的)abc原样。

我.h

struct abc {
int a1 = 0;
int b1 = 0;
};

void fun(const abc& x);

i.cpp

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

void fun(const abc& x) {
std::cout << x.a1 << "\n";
}

main.cpp

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

int main(){
abc val;
fun(val);
return 0;
}

关于c++ - C++ 中的冲突声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54364494/

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