主.cpp:
#include "headerone.hpp"
int main() {
menus::menu();
}
headerone.hpp:
#pragma once
#include "headertwo.hpp"
namespace menus {
void menu() {
object instance;
}
}
headertwo.hpp:
#pragma once
#include "headerone.hpp"
class object {
public:
object() {
method();
}
void method() {
int x; /* do something */
}
~object() {
menus::menu();
}
};
我在解構器中收到一個錯誤,說找不到選單命名空間。
錯誤 C2653“選單”:不是類或命名空間名稱
uj5u.com熱心網友回復:
該menu()函式應該只在頭檔案中宣告。該定義應在其相關的.cpp源檔案。
該headerone.hpp檔案應該是這樣的:
#pragma once
namespace menus {
void menu();
} // menus
該headerone.cpp檔案應該是這樣的:
#include "headerone.hpp"
#include "headertwo.hpp"
namespace menus {
void menu() {
object instance;
}
} // menus
許多優秀的 C 書籍忽略的領域之一是如何將源檔案、頭檔案和專案放在一起。有一本很好的書——雖然有點長(但仍然相關)—— John Lakos所著的《大規模 C 軟體設計》,它非常詳細地討論了專案布局和建議的實作。
他還有一本較新的兩卷書,名為Large-Scale C ,它不能替代早期的書。相反,它具有更廣泛、更雄心勃勃的軟體開發范圍。第 I 卷是流程和架構,第 II 卷是設計和實作。
uj5u.com熱心網友回復:
你的程式有回圈依賴。
除了頭檔案( .hpp )之外,您還可以使用源檔案( .cpp )解決此問題,如下所示:
頭檔案.hpp
#pragma once
#include "headertwo.hpp"
namespace menus {
void menu(); //this is a declaration
}
頭檔案.cpp
#include "headerone.hpp"
namespace menus
{
//this is a definition
void menu() {
object instance;
}
}
頭檔案
#pragma once
//no need to include headerone.hpp here
class object {
public:
object() {
method();
}
void method() {
int x; /* do something */
}
~object();//this is a declaration
};
標題二.cpp
#include "headertwo.hpp"
#include "headerone.hpp"
object::~object() {
menus::menu();
}
主程式
#include "headerone.hpp"
#include "headertwo.hpp"
int main() {
menus::menu();
}
上面修改后的程式的輸出可以在這里看到。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/397885.html
標籤:C
