这个静态方法发生了什么?
What happened with this static method?
我在名为 Renderer 的 class 中有一个名为 getSingleton() 的静态方法,我将其用作宏,如下所示:
Renderer.h
#define g_Renderer Renderer::getSingleton()
class Renderer {
private:
Renderer();
static Renderer renderer;
public:
Renderer getSingleton();
};
Renderer.cpp
#include "Renderer.h"
Renderer::Renderer() {}
Renderer Renderer::getSingleton() {
#ifndef CREATED_RENDERER
#define CREATED_RENDERER;
renderer = Renderer();
#endif // !CREATED_RENDERER
return renderer;
}
我访问main中的方法:
Main.cpp
#include "Renderer.h"
int main(){
return 0;
}
但是 Visual Studio 给我这个错误:
Main.obj : error LNK2019: unresolved external symbol "public: static class Renderer __cdecl Renderer::getSingleton(void)" (?getSingleton@Renderer@@SA?AV1@XZ) referenced in function main
这是为什么?提前致谢!
您的 getRenderer()
方法设置完全错误,无法满足您的要求。
一方面,它不是 static
。
另一方面,static
变量仅在任何地方被 声明 ,而不是 定义 ,这就是为什么链接器是抱怨。您需要将此行添加到 Renderer.cpp
以实际实例化变量:
Renderer Renderer::renderer;
此外,getRenderer()
每次调用都会返回一个新的 Renderer
对象,这对单例来说是无用的。 #ifdef
在运行时也没有用。
尝试更像这样的东西:
Renderer.h
#ifndef Renderer_H
#define Renderer_H
#define g_Renderer Renderer::getSingleton()
class Renderer {
private:
Renderer();
public:
static Renderer& getSingleton();
};
#endif
Renderer.cpp
#include "Renderer.h"
Renderer::Renderer() {}
Renderer& Renderer::getSingleton() {
static Renderer instance;
return instance;
}
Main.cpp
#include "Renderer.h"
int main(){
// use g_Renderer as needed...
return 0;
}
我在名为 Renderer 的 class 中有一个名为 getSingleton() 的静态方法,我将其用作宏,如下所示:
Renderer.h
#define g_Renderer Renderer::getSingleton()
class Renderer {
private:
Renderer();
static Renderer renderer;
public:
Renderer getSingleton();
};
Renderer.cpp
#include "Renderer.h"
Renderer::Renderer() {}
Renderer Renderer::getSingleton() {
#ifndef CREATED_RENDERER
#define CREATED_RENDERER;
renderer = Renderer();
#endif // !CREATED_RENDERER
return renderer;
}
我访问main中的方法:
Main.cpp
#include "Renderer.h"
int main(){
return 0;
}
但是 Visual Studio 给我这个错误:
Main.obj : error LNK2019: unresolved external symbol "public: static class Renderer __cdecl Renderer::getSingleton(void)" (?getSingleton@Renderer@@SA?AV1@XZ) referenced in function main
这是为什么?提前致谢!
您的 getRenderer()
方法设置完全错误,无法满足您的要求。
一方面,它不是 static
。
另一方面,static
变量仅在任何地方被 声明 ,而不是 定义 ,这就是为什么链接器是抱怨。您需要将此行添加到 Renderer.cpp
以实际实例化变量:
Renderer Renderer::renderer;
此外,getRenderer()
每次调用都会返回一个新的 Renderer
对象,这对单例来说是无用的。 #ifdef
在运行时也没有用。
尝试更像这样的东西:
Renderer.h
#ifndef Renderer_H
#define Renderer_H
#define g_Renderer Renderer::getSingleton()
class Renderer {
private:
Renderer();
public:
static Renderer& getSingleton();
};
#endif
Renderer.cpp
#include "Renderer.h"
Renderer::Renderer() {}
Renderer& Renderer::getSingleton() {
static Renderer instance;
return instance;
}
Main.cpp
#include "Renderer.h"
int main(){
// use g_Renderer as needed...
return 0;
}