2014-01-06 33 views
-1

在Windows中出現以下錯誤。錯誤:LINK2019:在命名空間中使用運算符<<時無法解析的外部符號

我有一個圖書館L1具有下面的頭文件,它的實施

namespace TC 
{ 
    namespace VT 
    { 
     enum Value 
     { 
      INVALID = 0, 
      Light = 1 

     }; 

     std::ostream& operator<<(std::ostream& os, Value value); 
    } 
} 

存在使用操作< <另一個庫L2。代碼編譯器很好,但會導致無法解析的外部符號錯誤。這意味着運營商< <不在鏈接時間。

庫L2中的代碼。

bool Mock::Test(
    TC::VT::Value venue) 
{ 

    string func(__func__); 

    cout << func 

     << "venue = " 
     << venue 

     << endl; 

    return false; 
} 

cout line是導致問題的原因之一。

MockClient.obj:錯誤LNK2019:解析外部符號「類的std :: basic_ostream> & __cdecl TC :: VT ::運算< <(類的std :: basic_ostream> &,枚舉TC :: VT ::值) 「

+3

嘛,哪裏定義?什麼是錯誤?你的[testcase](http://sscce.org)是什麼樣的? 2年,3個月,現在你應該知道如何提問! :) –

+0

這看起來像是一個簡單的案例庫L2沒有鏈接到庫L1 – Petesh

+0

它鏈接它 – KodeWarrior

回答

0

這裏發生了三件事之一。要麼你沒有鏈接到包含操作符定義的目標文件,你還沒有爲操作員提供定義,或操作員未被正確定義。既然你已經說過目標文件正在鏈接,你應該確保你的操作符的定義是正確的。你的定義應該像下面

std::ostream& TC::VT::operator<<(std::ostream& os, Value value) 
{ 
    // ... your code here 
    return os; 
} 

或者它應該被封裝在命名空間

namespace TC 
{ 
    namespace VT 
    { 
     std::ostream& TC::VT::operator<<(std::ostream& os, Value value) 
     { 
      // ... your code here 
      return os; 
     } 
    } 
} 
相關問題