2014-01-06 3 views
-1

Я получаю следующую ошибку в окнах.Ошибка: 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: неразрешенный внешний символ «класс станд :: basic_ostream> & __cdecl ТС :: ВТ :: Оператор < < (класс станд :: basic_ostream> &, перечисление ТС :: VT :: Value) "

+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; 
     } 
    } 
} 
Смежные вопросы