這個問題在這里已經有了答案: 將類代碼分成頭檔案和 cpp 檔案 8 個回答 5 天前關閉。
只是有一個小問題,我還沒有弄清楚。我在不同的專案中使用了類似的程式結構,但問題歸結為這個。我有兩個 cpp 檔案,它們是:
Trading_dte.cpp :
#include <iostream>
using namespace std;
class Dte
{
public:
int addition(int a, int b)
{
return a b;
}
};
dummy.cpp :
#include <iostream>
#include "Trading_dte.hpp"
Dte obj;
int check()
{
std::cout<<obj.addition(6,9);
}
我創建了一個名為 Trading_dte.hpp 的頭檔案:
# pragma once
#include <iostream>
class Dte
{
public:
int addition(int a, int b);
};
現在,當我嘗試使用以下命令進行編譯時:
g Trading_dte.cpp dummy.cpp
我收到錯誤:
/usr/bin/ld: /tmp/ccCcM8R6.o: in function `check':
dummy.cpp:(.text 0x1a): undefined reference to `Dte::addition(int, int)'
collect2: error: ld returned 1 exit status
我確定它很小,但我就是不知道是什么。非常感謝!
uj5u.com熱心網友回復:
您的 cpp 檔案需要以不同的方式撰寫
#include "Trading_dte.hpp"
#include <iostream>
int Dte::addition(int a, int b)
{
return a b;
}
uj5u.com熱心網友回復:
您已經創建兩個單獨的Dte類,一個可見的main和另一只可見在Trading_dte.cpp。對main, 中定義的可見的Trading_dte.hpp具有addition成員函式的宣告但沒有定義。
可能最簡單的方法是Trading_dte.cpp將實作放入Trading_dte.hpp.
Trading_dte.hpp:
# pragma once
class Dte
{
public:
int addition(int a, int b)
{
return a b;
}
};
請注意,我還洗掉了該#include <iostream>行。您不需要在頭檔案中使用它,因為您不在類中使用它。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/364000.html
下一篇:反射增強賦值有什么神奇的方法嗎?
