簡體   English   中英

關於C ++中的頭文件創建錯誤

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM