[英]How to call a method defined in main.cpp from another .cpp source file?
首先,這是一個普遍的問題
第二:我想到了這一點,因為現在它在我的項目中使事情變得復雜。 不用擔心我有解決方法,但是我仍然想知道是否還有另一種解決方法。
提出問題:
我有我的main.cpp。 我在其中定義了一些方法和功能。 我還有一些具有其他功能和其他東西的文件,但是現在我需要一個可與main.cpp中定義的臨時變量一起使用的函數。 如何擴展此類變量的范圍,以便也可以在其他文件中使用它?
從課堂上,我知道字段可以是私有的也可以是公共的。 但是這個變量呢? 它是私人的嗎? 上市? 還有什么嗎 我可以為此變量創建一個getter / setter方法嗎? 我什至不能將main.cpp包含在另一個目錄中,因為它將是遞歸的,然后我將main定義為無限次....)
主要問題是:
如何在另一個文件中訪問在main.cpp中定義的變量?
一些示例代碼:
在main.cpp中:
int var = 0;
int getVar() {
return var;
}
void doVar() {
// sth happens with var
}
int main() {
MyObject myObj;
doVar();
}
在MyObject.cpp中:
class MyObject {
void DoSth(){
// NEEDS var from main.cpp, to do sth with it!
// getVar() doesn't work!
// doVar() doesn't work either!
}
}
原諒我這是以前問過的還是真的很愚蠢的問題,但是我剛才真的很想知道
我的解決方法是將doVar和var設置為MyObject的成員(即,現在都在同一文件MyObject.cpp中),但這是唯一的方法嗎?
“是
private
/public
/其他?”
這就是所謂的全局變量 ,它是公開可見的。 任何人都可以提供extern int var;
來訪問它extern int var;
聲明。
“我可以為此變量創建一個getter / setter嗎?”
是的,您可以這樣做(請參閱后面的說明)
“我什至不能將main.cpp包含在另一個目錄中,因為它將是遞歸的,然后我將main定義為無限次....)”
當然,您不能這樣做(除了您永遠不想在任何地方包括.cpp
文件)。
您需要一些標頭來聲明此接口是在外部實現的,例如
VarInterface.hpp
#ifndef VARINTERFACE_HPP
#define VARINTERFACE_HPP
extern int var; // Optional, just encapsulating it with the functions is the
// better choice
int getVar();
void doVar();
#endif // VARINTERFACE_HPP
並將其包含在MyObject.cpp
的實現中。
至於你的評論 :
“這會做什么?我只是在Google上搜索並想出了與
static
類似的東西,對嗎?那有什么區別?”
沒有針對自由功能的private
或public
訪問范圍策略(例如使用C static
關鍵字)。
像上面示例中所示的任何函數或全局變量聲明實際上都是可訪問的,除非將其放置在未命名的命名空間中 。 后者實際上限制了鏈接器對它們所在的翻譯單元的訪問:
Another.cpp
namespace {
// These functions and variables are exclusively accessible within
// Another.cpp
int var = 0;
int getVar();
void doVar();
}
但是,就上述情況而言,我想從您的問題中了解到相反的情況,因為您想要相反的說法,因此請以上述說明作為補充。
“您可以在其中創建“私有”字段,並以某種方式從該項目中的另一個.cpp訪問它們嗎?”
如果要隱藏int var;
其他翻譯單位的聲明/定義(推薦),您仍然可以像
VarInterface.hpp
#ifndef VARINTERFACE_HPP
#define VARINTERFACE_HPP
int getVar();
void doVar();
#endif // VARINTERFACE_HPP
MyObject.cpp
#include "VarInterface.hpp"
namespace {
int var = 0;
}
int getVar() {
return var;
}
void doVar() {
// sth happens with var
}
main.cpp
#include "VarInterface.hpp"
int main() {
MyObject myObj;
doVar();
}
聲明您需要的任何外部變量或函數:
extern int var;
int getVar();
void doVar();
可以在使用它們的源文件中找到,也可以在任何想要使用它們的文件中包含一個標頭。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.