我有这两个简单的文件,它们定义了一个带有 tryME 函数的 C++ 类
______myclass.h________________
#pragma once
void tryME()
{
}
class myclass
{
public:
myclass(void);
myclass(void);
void callTryME();
};
_________myclass.cpp____________
#include "myclass.h"
myclass::myclass(void)
{
}
myclass::~myclass(void)
{
}
void myclass::callTryME()
{
tryME();
}
这给出了错误
1>myclass.obj : 错误 LNK2005: "void __cdecl TryME(void)" (?TryME@@YAXXZ) 已在 tryout.obj 中定义 1>C:\tryout.exe : 致命错误 LNK1169: 找到一个或多个多重定义的符号
如果我将 tryME() 函数声明为静态,问题就解决了。但为什么?
我知道 .h 文件包含在 .cpp 文件中,然后编译(到翻译单元中)并且静态变量和函数对它们包含的整个翻译单元都是可见的,但是为什么程序不起作用没有“静态”关键字?函数 tryME 应该在类之外是“全局的”,因此是可见的,不是吗?调用是否在 tryME() 之前放置了“this->”?