2014-11-27 6 views
2

компиляции Из-за некоторые статические данные, у меня есть функцияИспользования ехЬегпа для обозначения функции, определенной в другом блоке

void foo(MyNamespace::bar)

определен в некоторой единице компиляции. Но его точка использования находится в другом блоке компиляции. Поэтому я использую

namespace MyNamespace 
{ 
    extern void foo(bar); 
} 

Но компоновщик не может найти определение функции. Я злоупотребляю extern?

+2

Определяется ли 'foo' внутри' MyNamespace'? –

+0

Ваше использование extern в порядке. Похоже, что в компоновщике отсутствует единица компиляции, содержащая определение функции, или определение находится в неправильном пространстве имен или аналогично. Какой линкер вы используете? –

+0

Я использую MSVC2012. –

ответ

7

externможет использовать для такого рода вещей.

Ваша проблема в том, что компоновщик ожидает функцию MyNamespace::foo(bar); из-за того, что ваш оператор extern находится в пределах MyNamespace.

У вас есть два варианта:

  1. использование extern void foo(MyNamespace::bar); в вашей "точке использования". Не включайте эту строку в пределах MyNamespace.

  2. В качестве альтернативы, приложите определение функции в пределах MyNamespace.