我正在編寫當前項目的實用函數。類的多重定義
現在,我有一個utility.h頭定義靜態方法的類:
#pragma once
class Utils
{
public:
static int firstFunc()
{
return 0;
}
static bool secondFunc()
{
return false;
}
};
這頭被包含每次我需要在使用這些函數(兩種翻譯單位時間時刻),它工作得很好。
現在,在代碼審查後,有人建議用C風格的函數替換這個類。我天真的第一次嘗試:
#pragma once
int firstFunc()
{
return 0;
}
bool secondFunc()
{
return false;
}
未鏈接,返回的功能錯誤多個定義。 我明白爲什麼會發生這種情況:包含函數定義的頭文件utils.h存在於兩個不同的編譯單元中:鏈接器不知道要使用哪個定義。
我知道解決方案是將定義移動到專用的utils.cpp並且只保留頭中的聲明。
我現在的問題是:爲什麼沒有這種情況發生時,我曾與靜態方法,當我仍然有不同的翻譯單位的同一類的多個定義的類?
讓我猜測:你是一個Java程序員,學習C++? (對不起,如果這冒犯你)這是一種Java技術,濫用類爲名稱提供範圍。在C++中,你可以用'namespace'來完成。 –