標頭檔案互相包含解決 關於多檔案中的重複定義標頭檔案

2021-10-11 15:51:06 字數 2208 閱讀 8438

先上錯誤**:

標頭檔案:fenshu.h

#pragma once

#include

#include

using namespace std;

class fenshu

private:

int a, b;

public:

fenshu(int x, int y)

a = x; b = y;

void display();

void yf();

friend fenshu operator +(fenshu& s1, fenshu& s2);

friend fenshu operator -(fenshu& s1, fenshu& s2);

friend fenshu operator *(fenshu& s1, fenshu& s2);

friend fenshu operator /(fenshu& s1, fenshu& s2);

原始檔:realize.cpp

#include"fenshu.h"

#include

#include

using namespace std;

void fenshu::yf()

if (b == 0)

cout << "分母不為0" << endl;

int m = abs(a),n = abs(b),r;

r = a % b;

while (r != 0)

a = b; b = r; r = a % b;

a = b / n; b = b / n;

if (b < 0)

a = -a; b = -b;

void fenshu::display()

if (a == 0)

cout << 0 << endl;

else if (b == 1)

cout << a << endl;

else

cout << a << '/' << b << endl;

fenshu operator +(fenshu& s1, fenshu& s2)

fenshu t(s1.a*s2.b + s2.a*s1.b, s1.a*s2.b);

t.yf();

return t;

fenshu operator -(fenshu& s1, fenshu& s2)

fenshu t(s1.a*s2.b - s2.a*s1.b, s1.a*s2.b);

t.yf();

return t;

fenshu operator *(fenshu& s1, fenshu& s2)

fenshu t(s1.a*s2.a, s1.b*s2.b);

t.yf();

return t;

fenshu operator /(fenshu& s1, fenshu& s2)

fenshu t(s1.a*s2.b, s1.a*s2.a);

t.yf();

return t;

main.cpp

#include"fenshu.h"

#include

#include"realize.cpp"

#include

using namespace std;

int main()

fenshu fs1(2, 12),fs2(3,9);

cout << "a="; fs1.display();

cout << "b="; fs2.display();

cout << "a+b="; (fs1 + fs2).display();

cout<< "a-b="; (fs1 - fs2).display();

cout << "a*b="; (fs1*fs2).display();

cout << "a/b="; (fs1 / fs2).display();

return 0;

在main中,由於再次定義了標頭檔案realize.cpp,造成錯誤,這就是標頭檔案重定義。

c++中由於標頭檔案重複包含了所定義的變數或者常量,編譯器就會報重複定義的錯誤。

最直接的解決辦法是去掉main中的realize.cpp。也有其他辦法,這裡就不做闡述。

其實這個分數過載也有問題,大家自己改吧......

關於C 中的標頭檔案互相包含

在c 中一般的程式都會分成標頭檔案和cpp檔案,然後包含不同的標頭檔案可以獲得標頭檔案中的函式的引用,但是這裡就會出現乙個問題就是如果兩個檔案中同時包含了同乙個標頭檔案,例如 a.h中包含了c.h 然後在b.h中 也包含c.h 那麼就會出現上述所提到的重複包含的情況。所以在這裡可以使用乙個 ifnd...

標頭檔案互相包含問題

當我們有兩個類的標頭檔案互相包含時,如果出現乙個類中有另乙個類的物件時,vs就會報這樣的錯error c4430 缺少型別說明符 假定為 int。test2.h ifndef test2 h define test2 h include include test1.h using namespace...

兩個類標頭檔案互相包含

c 中兩個類的標頭檔案互相包含問題 csdn部落格 我們知道,當乙個類 設類a 中包含另乙個類 設類b 的物件時,必須在該檔案中包含另乙個類的標頭檔案,如果兩個類都互用到了對方的物件,理論上就要互相包含標頭檔案,但是這樣是不可取的。貼出 如下 這樣是無法通過編譯的,其原因是它們的標頭檔案互相包含了,...