Связь функций пространства имен - PullRequest
1 голос
/ 18 мая 2010

У меня есть пара методов, объявленных на уровне пространства имен в заголовке для класса:

// MyClass.h

namespace network {

int Method1(double d);
int Method2(double d);

class MyClass
{
  //...
} 

}

затем определяется в

//MyClass.cpp

int
Method1(double d)
{ ... }

int
Method2(double d)
{ ... }

Этот проект компилируется чисто и является зависимостью для проекта пользовательского интерфейса, который использует MyClass. Эти функции ранее были функциями-членами MyClass, но были перемещены в пространство имен, так как это было более уместно.

Моя проблема в том, что проект пользовательского интерфейса жалуется, когда попадает к компоновщику:

1> network.lib (MyClass.obj): ошибка LNK2001: неразрешенный внешний символ «int __cdecl network :: Method1 (double)» (? INT @ ds @ sim @@ YAHN @ Z) * ​​1011 *

1> network.lib (MyClass.obj): ошибка LNK2001: неразрешенный внешний символ «int __cdecl network :: Method2 (double)» (? CINT @ ds @ sim @@ YAHN @ Z) * ​​1013 *

Что я делаю не так?

Ответы [ 2 ]

2 голосов
/ 18 мая 2010

Похоже, вы поместили объявления функций в блок пространства имен, но забыли также поместить реализации функций в блок пространства имен. Попробуйте:

namespace network {
  int
  Method1(double d)
  { ... }

  int
  Method2(double d)
  { ... }
}
1 голос
/ 18 мая 2010

Вам также необходимо поместить функции из файла .cpp в пространство имен. Компилятор считает, что это две совершенно разные вещи!

...