簡體   English   中英

C ++:在頭文件中定義void *數組並在cpp文件中聲明它?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM