[英]ABOUT HEADER FILE CREATION ERROR IN C++
我正在為.cpp文件創建頭文件,其中僅包含函數的聲明或原型
這是我編寫的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,其中i已定義的函數添加(,)和子(,)
#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:錯誤LNK2005:example.obj中已經定義了“ int s”(?s @@ 3HA)(objs \\ header \\ Debug \\ header.exe):致命錯誤LNK1169:找到一個或多個乘法定義的符號,請提供幫助我要解決此錯誤,為此我已經工作了很長時間...預先感謝
您收到錯誤,因為.h中的這一行已經是一個定義 :
int s;
您需要在標題中包含以下內容:
extern int s;
然后,在一個准確的.cpp文件中,通常是一個與.h文件具有相同基本文件名的文件,您需要具有以下定義:
int s;
相關:您不需要帶有函數聲明的extern
關鍵字,因為它們只是聲明,可以告訴編譯器該函數存在於某個地方,並且您可以隨意執行多次。 但是,如果將全局(非static
,非inline
)函數定義 (使用{}
函數主體而不是;
)放置到.h文件中,則對於多個定義確實會出現類似的鏈接器錯誤。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.