[英]C++: Defining void* array in header file and declaring it in a cpp file?
我看到了這個問題,並盡力回答該問題。 要在頭文件中使用extern
關鍵字定義一個數組,然后在另一個cpp文件中的該名稱空間或類之外聲明它。
它確實對我不起作用,我不確定是否是因為我使用的是void指針數組(即void* array[]
),還是因為我的無知使我無法看到問題。
這是我能想到的最短的例子:
[cpp.cpp]
#include "h.h"
void main(){
void* a::b[] = {
a::c = a::d(1)
};
}
[hh]
namespace a{
struct T* c;
struct T* d(int e);
extern void* b[];
}
所以問題是我收到錯誤:IntelliSense:無法在當前范圍中定義變量“ a :: b”
而且我不知道為什么會這樣。
首先,您應該將main()聲明為int! 看到這里為什么。
在名稱空間中將數組聲明為extern
意味着它屬於該名稱空間,但在ele的某個地方定義,通常在單獨的編譯單元中進行定義。
不幸的是,您在main()中嘗試將元素重新定義為局部變量。 這說明了您收到的錯誤消息。
您應該執行以下操作:
#include "h.h"
void* a::b[] { a::c, a::d(1) }; // global variable belonging to namespace
int main() // int!!!
{
/* your code here */
}
該代碼將編譯。 接受在同一編譯單元中定義a :: b []的事實。 但是鏈接器會抱怨,因為a :: d(1)是對函數d的調用,返回了指向結構的指針,並且該函數在任何地方都未定義。
因此,您還應該定義以下內容:
namespace a {
struct T* d(int e)
{
return nullptr; // in reality you should return a pointer to struct T
}
}
有趣的是,結構T不需要為該代碼進行編譯和鏈接。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.