C++ c++;如果函数在.cpp中实现,则链接错误
如果我在.cpp中实现类的create方法,我会得到 错误LNK2019:未解析的外部符号“受保护:u thiscall Singleton::Singleton(void)”(??0 Singleton@@IAE@XZ)在函数“public:static void_uucdecl Singleton::create(void)”中引用(?create@Singleton@@萨克斯克斯 但是,如果我在头文件中实现该方法,它编译时不会出现任何错误:S 头文件C++ c++;如果函数在.cpp中实现,则链接错误,c++,static,singleton,linker-errors,C++,Static,Singleton,Linker Errors,如果我在.cpp中实现类的create方法,我会得到 错误LNK2019:未解析的外部符号“受保护:u thiscall Singleton::Singleton(void)”(??0 Singleton@@IAE@XZ)在函数“public:static void_uucdecl Singleton::create(void)”中引用(?create@Singleton@@萨克斯克斯 但是,如果我在头文件中实现该方法,它编译时不会出现任何错误:S 头文件 #pragma once #inc
#pragma once
#include <iostream>
class Singleton
{
public:
static Singleton * getInstance()
{
return s_instance;
}
static void create();
static void destroy();
void help();
protected:
static Singleton * s_instance;
Singleton();
};
但是,如果我在头中实现create方法,它不会抛出任何错误
头文件中实现了create方法
#pragma once
#include <iostream>
class Singleton
{
public:
static Singleton * getInstance()
{
return s_instance;
}
static void create(){
if (!s_instance)
{
s_instance = new Singleton;
}
}
static void destroy();
protected:
static Singleton * s_instance;
Singleton();
};
#pragma一次
#包括
单件阶级
{
公众:
静态单例*getInstance()
{
返回s_实例;
}
静态void create(){
如果(!s_实例)
{
s_实例=新单例;
}
}
静态空洞破坏();
受保护的:
静态单例*s_实例;
Singleton();
};
在cpp中,您的create函数正在尝试使用new运算符初始化Singleton,但您没有为其提供构造函数。请尝试为Singleton()
提供一个实现。例如:
protected:
static Singleton * s_instance;
Singleton() {}
};
在cpp中,您的create函数试图通过使用new运算符初始化Singleton,但您没有为其提供构造函数。请尝试为
Singleton()
提供实现。例如:
protected:
static Singleton * s_instance;
Singleton() {}
};
在cpp中,您的create函数试图通过使用new运算符初始化Singleton,但您没有为其提供构造函数。请尝试为
Singleton()
提供实现。例如:
protected:
static Singleton * s_instance;
Singleton() {}
};
在cpp中,您的create函数试图通过使用new运算符初始化Singleton,但您没有为其提供构造函数。请尝试为
Singleton()
提供实现。例如:
protected:
static Singleton * s_instance;
Singleton() {}
};
这个问题。
您已经声明了一个默认构造函数,并且正在使用它(在new
表达式中),但尚未实现它
修理
只需删除构造函数声明:
protected:
static Singleton * s_instance;
// Singleton(); -- don't have this. Remove it.
};
其他事项。
使用受保护的
特性,类是为继承而设计的,那么如何确保派生类只能通过单例机制实例化呢
您对派生类没有太多的控制权,因此最简单的方法就是记录每个派生类应该声明和定义一个非public默认构造函数
然而,有一个技巧可以用来实现这一点,因为虚拟基必须由派生最多的类初始化。这可以用来强制客户端代码在底部添加最终的类派生。其中派生最多的类是一个模板实例化,它定义了一个非公共构造函数
一个更实际的选择是把事情颠倒过来
这是不是为了设计<代码> Stutelon < /Cord>类(由受保护的东西发出信号),而是设计它从客户端代码类继承。这意味着使用模板。Andrei Alexandrescu在他的经典著作《现代C++设计》中讨论了一些单例方法。 您已经声明了一个默认构造函数,并且正在使用它(在
new
表达式中),但尚未实现它
修理
只需删除构造函数声明:
protected:
static Singleton * s_instance;
// Singleton(); -- don't have this. Remove it.
};
其他事项。
使用受保护的
特性,类是为继承而设计的,那么如何确保派生类只能通过单例机制实例化呢
您对派生类没有太多的控制权,因此最简单的方法就是记录每个派生类应该声明和定义一个非public默认构造函数
然而,有一个技巧可以用来实现这一点,因为虚拟基必须由派生最多的类初始化。这可以用来强制客户端代码在底部添加最终的类派生。其中派生最多的类是一个模板实例化,它定义了一个非公共构造函数
一个更实际的选择是把事情颠倒过来
这是不是为了设计<代码> Stutelon < /Cord>类(由受保护的东西发出信号),而是设计它从客户端代码类继承。这意味着使用模板。Andrei Alexandrescu在他的经典著作《现代C++设计》中讨论了一些单例方法。 您已经声明了一个默认构造函数,并且正在使用它(在
new
表达式中),但尚未实现它
修理
只需删除构造函数声明:
protected:
static Singleton * s_instance;
// Singleton(); -- don't have this. Remove it.
};
其他事项。
使用受保护的
特性,类是为继承而设计的,那么如何确保派生类只能通过单例机制实例化呢
您对派生类没有太多的控制权,因此最简单的方法就是记录每个派生类应该声明和定义一个非public默认构造函数
然而,有一个技巧可以用来实现这一点,因为虚拟基必须由派生最多的类初始化。这可以用来强制客户端代码在底部添加最终的类派生。其中派生最多的类是一个模板实例化,它定义了一个非公共构造函数
一个更实际的选择是把事情颠倒过来
这是不是为了设计<代码> Stutelon < /Cord>类(由受保护的东西发出信号),而是设计它从客户端代码类继承。这意味着使用模板。Andrei Alexandrescu在他的经典著作《现代C++设计》中讨论了一些单例方法。 您已经声明了一个默认构造函数,并且正在使用它(在
new
表达式中),但尚未实现它
修理
只需删除构造函数声明:
protected:
static Singleton * s_instance;
// Singleton(); -- don't have this. Remove it.
};
其他事项。
有保护的