ошибка связи с функциями, не являющимися членами - PullRequest
0 голосов
/ 29 июля 2010
------------------blah.h------------------------
#pragma once
namespace SomeNamespace{
 static void someMethod(){}
}
-----------------blah.c--------------------------
#include “blah.h”
int main(int argc, char**argv){
 SomeNamespace::someMethod();
return 0;
}

Вышеприведенное работает нормально, но если я опускаю «static», я получаю:


>stdafx.obj : error LNK2005: "void __cdecl SomeNamespace::someMethod(void)"
(?someMethod@SomeNamespace@@YAXXZ) already defined in Dude.obj
1>...\Debug\Dude.exe : fatal error LNK1169: one or more multiply defined
symbols found

Я читал о том, что «static» делает с функциями, не являющимися членами - http://www.velocityreviews.com/forums/t284052-static-functions.html

... присвойте ему внутреннюю связь, чтобы она не была видна за пределами модуля компиляции - т. Е. (Слишком упрощенно) компоновщик ее не увидит.Такое использование «static» устарело и накладывает ограничение на то, что функцию нельзя использовать в качестве аргумента шаблона.Современный способ - вместо этого поместить функцию в анонимное пространство имен ...

Но дело в том, что я хочу, чтобы метод был представлен.Что я делаю не так?

1 Ответ

1 голос
/ 29 июля 2010
  • Объявите вашу функцию в .h (т.е. void foo(int x);)
  • Определите , затем в .c (т.е. void foo(int x) { ... })
...