2013-09-21 79 views
2

我得到以下的錯誤消息(有人隨意編輯不必要比特):C++「致命錯誤LNK1120」未解決的靜態類成員

1> FIXDecoder.obj:錯誤LNK2001:解析的外部符號「私人: 靜態類std :: unordered_map,類std :: allocator>,類 std :: basic_string,類 std :: allocator>,struct std :: hash,類 std :: allocator >>,struct std :: equal_to,class std :: allocator>>,class std :: allocator,class std :: allocator> const,class std :: basic_string,class std :: allocator >> >>> FD :: Fi xValueMappingsDict「 (?FixValueMappingsDict @ FD @@ 0V?$ unordered_map @ V $ $ basic_string @ DU?$ char_traits @ D @ std @@ V $ $ allocator @ D @ 2 @@ std @@ V12 @ U $ $ hash @ V'$ @的basic_string杜?$ @ char_traits @ d @@性病V'$ @分配器@ d @@ 2 STD @@@ 2 @ U&$ @ equal_to V'$ @的basic_string杜?$ @ char_traits @ d @性病@V?$分配器@ d @ @@ 2 STD @@@ 2 @ V'$分配器@ U&$對@ $$ CBV?$ basic_string的@ DU?$ char_traits @ d @ @@ STD V'$分配器@ d @ 2 @@ std @@ V12 @@ std @@@ 2 @@ std @@ A)

1> FD.obj:error LNK2001:無法解析的外部符號「private:static class std :: unordered_map,class std :: allocator>類 std :: basic_string,類 std :: allocator>,std :: hash,類 std :: allocator>>,struct std :: equal_to,class std :: allocator>> ,類std :: allocator,類 std :: allocator> const,class std :: basic_string,class std :: allocator >> FD :: FIXFieldNoDict「 (?FIXFieldNoDict @ FD @@ 0V?$ unordered_map @ V $ $ basic_string @ DU?$ char_traits @ d @ @@ STD V'$分配器@ d @ @@ 2 STD @@ @ V12 U&$散列@ V'$ basic_string的@ DU?$ char_traits @ d @ @@ STD V'$分配器@ d @ 2 @@ STD @@@ 2 @ U&$ equal_to @ V'$ basic_string的@ DU?$ char_traits @ d @ @@ STD V'$分配器@ d @ @@ 2 STD @@@ 2 @ V'$分配器@ú ?$ pair @ $$ CBV?$ basic_string @ DU?$ char_traits @ D @ std @@ V?$ allocator @ D @ 2 @@ std @@ V12 @@ std @@@ 2 @@ std @@ A)

1> C:\視覺工作室2012 \項目\ FD \ 64 \調試\ FD.exe:致命錯誤 LNK1120:2周解析的外部

此代碼:

//FH.h 
#ifndef FD_H 
#define FD_H 

#include "FM.h" 
#include <unordered_map> 
#include <string> 

class FD{ 
public: 
    FD(); 
    FD(FM message); 
    ~FD(); 
    FD(const FD& tocopy); 
    FD& operator=(const FD& toassign); 

private: 
    static unordered_map<string,string> FIXFieldNoDict; 
    static unordered_map<string,string> FixValueMappingsDict; 
}; 

#endif 

//FD.cpp 
#include "FD.h" 
#include "Mappings.h" 
#include "Utils.h" 
#include <vector> 
#include <string> 
#include <iostream> 
#include <unordered_map> 

using namespace std; 

FD::FD(){ 
    FIXFieldNoDict = Mappings::createFIXFieldNoDict(); 
    FixValueMappingsDict = Mappings::getFIXValuesDict(); 
} 

Mappings.h只是包含創建一個unordered_map

#ifndef MAPPINGS_H 
#define MAPPINGS_H 

#include <unordered_map> 
#include <string> 

using namespace std; 

class Mappings{ 

public: 
    Mappings(); 

    static unordered_map<string,string> createFIXFieldNoDict(); 

    static unordered_map<string,string> getFIXValuesDict(); 
. 
. 
}; 

回答

4

您需要在FD.cpp文件來創建靜態成員的情況下,一些功能:

//FD.cpp 
#include "FD.h" 
#include "Mappings.h" 
#include "Utils.h" 
#include <vector> 
#include <string> 
#include <iostream> 
#include <unordered_map> 

using namespace std; 

unordered_map<string,string> FD::FIXFieldNoDict = Mappings::createFIXFieldNoDict(); 
unordered_map<string,string> FD::FixValueMappingsDict = Mappings::getFIXValuesDict(); 


FD::FD(){ 
} 

注意你不應該在FD構造函數中初始化它們,因爲你可以在構造任何對象之前使用靜態成員(並且你需要初始化它們一次而不是每次都是這樣)我的對象被構​​造)。

+1

感謝您的!知道這是與靜態和翻譯單位有關! – user997112

3

你應該實現在FD.cpp文件這兩個成員:

static unordered_map<string,string> FIXFieldNoDict; 
static unordered_map<string,string> FixValueMappingsDict; 

這樣的:

unordered_map<string,string> FD::FIXFieldNoDict; 
unordered_map<string,string> FD::FixValueMappingsDict; 
相關問題