2012-08-02 40 views
0

在這樣的形式......靜態數組作爲一個私有成員

#ifndef UNICODE 
#define UNICODE 
#endif 


#include <Windows.h> 
#include <iostream> 

class A 
{ 
public: 
    void makeFoo(TCHAR* output) 
    { 
     wcscpy(outputBuffer,TEXT("Hello world ♥")); 
    } 
private: 
    static const int MAX_OUTPUT_SIZE=2000; 
    static TCHAR outputBuffer[MAX_OUTPUT_SIZE]; 
}; 


int main() 
{ 
    TCHAR string[255]; 

    A example; 

    example.makeFoo(string); 

    MessageBox(0,string,0,0); 

    system("Pause"); 
    return 0; 
} 

...我們有一個 鏈接錯誤!

1> main.obj:錯誤LNK2001:無法解析的外部符號 「私人: 靜態wchar_t的* A :: OutputBuffer中」(?OutputBuffer中@一@@ 0PA_WA)

+1

你的問題表明你對'static'關鍵字的工作原理以及它的作用沒有很好的理解。你確定你希望這是「靜態」嗎?這意味着只有一個'A :: outputBuffer'實例被類'A'的所有實例共享。 – Chad 2012-08-02 14:35:09

回答

3

發生鏈接器錯誤的原因您尚未在任何地方提供A::outputBuffer的定義。在文件範圍寫這解決這個問題:

TCHAR A::outputBuffer[A::MAX_OUTPUT_SIZE]; 

string值是出乎意料的,因爲緩衝區是未初始化的; makeFoo對它的參數不做任何處理,並且你不用手動初始化緩衝區。因此它可以包含任何東西(「垃圾」)。

+0

這是'outputBuffer'的*定義*。 *初始化程序*與鏈接程序錯誤無關。 – AnT 2012-08-02 14:37:08

+0

@AndreyT:當然。最近用其他語言介入太多。謝謝 :) – Jon 2012-08-02 14:42:59

0

地址:

TCHAR A::outputBuffer[A::MAX_OUTPUT_SIZE]; 

以上main()

相關問題