------------------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» устарело и накладывает ограничение на то, что функцию нельзя использовать в качестве аргумента шаблона.Современный способ - вместо этого поместить функцию в анонимное пространство имен ...
Но дело в том, что я хочу, чтобы метод был представлен.Что я делаю не так?