gpt4 book ai didi

c++ - 关于 C++ 中的头文件创建错误

转载 作者:行者123 更新时间:2023-11-28 07:06:10 25 4
gpt4 key购买 nike

我正在为 .cpp 文件创建头文件,其中它将只包含函数的声明或原型(prototype)

这是我写的三个程序 1.header.h 文件//我在其中声明函数 add(,) 和 sub(,)

 #ifndef HEADER_H
#define HEADER_H
#pragma once
int s;
int add(int a,int b);
int sub(int a,int b);
#endif

2.header.cpp,其中我定义了函数 add(,) 和 sub(,)

 #include<iostream>
#include "header.h"
using namespace std;


int add(int a,int b){
s=10;
int c=a+b+s;
return c;
}

int sub(int a,int b){
int c=a-b;
return c;
}

3.example.cpp

     #include<iostream>
#include"header.h"
using namespace std;
void main(){

int a=10,b=20;

int c=add(a,b);
int d=sub(c,a);

cout<<"c"<<c;
cout<<"d"<<d;

//cout<<s;
getchar();
}

在这里,我在 header.h 中声明了变量“s”并在 header.cpp 文件中定义,它作为 example.cpp 文件输出中变量 c 的补充给出。

它显示错误header.obj : error LNK2005: “int s” (?s@@3HA) 已经在 example.obj 中定义Projects\header\Debug\header.exe: fatal error LNK1169:找到一个或多个多重定义的符号 请帮我解决这个错误,我为此工作了很长时间...提前致谢

最佳答案

你得到错误,因为 .h 中的这一行已经是一个定义:

int s;

你需要在标题中有这个:

extern int s;

然后在一个 .cpp 文件中,通常是一个与 .h 文件具有相同基本文件名的文件,您需要定义:

int s;

相关:函数声明不需要 extern 关键字,因为它们只是声明,告诉编译器这样的函数存在于某处,你可以多次这样做喜欢。但是,如果您放置一个全局(非静态、非内联)函数定义(带有{}函数body 而不是 ;) 到 .h 文件,您确实会遇到关于多个定义的类似链接器错误。

关于c++ - 关于 C++ 中的头文件创建错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21721059/

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