2013-07-03 169 views
-1

我的代碼將類似於下面的代碼:解析外部符號9

class DMLGroup 
{ 
public: 
    DMLGroup(); 
~DMLGroup(); 
    void SetName(string name); 
private: 
string mName; 
}; 
void DMLGroup::SetName(string nm){ 
    mName.assign(nm); 
} 

int main() 
{   
    string api="API_DML"; 
    DMLGroup * dmlGr = new DMLGroup(); 
    dmlGr->SetName(api.c_str()); //Getting link error with this statement 
} 

我所能能夠編譯上面的代碼,但未能使用MS視覺工作室9的窗口上7連結32位操作系統。

注意:我能夠在suselinux-x8664平臺上成功編譯,鏈接和運行。問題是隻有與窗口

請告訴我如何解決這個問題?

+2

當你調用SetName時,你會發生什麼?我也懷疑你的鏈接,'類DMLGroup()'當然不應該編譯。 –

+1

您沒有'SetName'函數的定義,所以它不會鏈接到任何地方。它可能甚至不會編譯 - 類名後面的括號是無效的語法。請務必複製並粘貼您正在使用的*實際*代碼。 –

+0

沒有正確發佈代碼...只是集中在擺出我的問題.sorry – ybc

回答

0

下面的代碼編譯&鏈接罰款:

#include "stdafx.h" 
#include <string> 

class DMLGroup 
{ 
public: 
    DMLGroup() {} 
    ~DMLGroup(){} 
    void SetName(std::string name); 
private: 
    std::string mName; 
}; 
void DMLGroup::SetName(std::string nm){ 
    mName.assign(nm); 
} 

int main() 
{   
    std::string api="API_DML"; 
    DMLGroup * dmlGr = new DMLGroup(); 
    dmlGr->SetName(api.c_str()); //Getting link error with this statement 
} 

我改變什麼:

  • 執行#included stdafx.h中,因爲它是VS標準 - 你可以把它關掉
  • 的#includes因爲它是缺少的
  • 裝飾字符串的每一個使用與std :: - 因爲很可能你會在頭文件中使用你的類定義,並在那裏你根本就沒有使用「使用命名空間」
  • 提供的默認實施構造&析構函數

這就是全部。檢查以上部分丟失的內容,或提供一個暴露問題&提供鏈接器錯誤消息的示例。