cpp hpp separation
cpp hpp separation
当我试图将类的声明和定义放入单独的hpp和cpp文件时,我遇到了一些错误。你能帮我修一下吗。我正试图操纵这样一个单例:
sing.hpp:
class GlobalClass {
int m_value;
static GlobalClass *s_instance;
GlobalClass(int);
public:
int get_value();
void set_value(int v);
static GlobalClass *instance(); };
sing.cpp:
#include"sing.hpp"
GlobalClass::GlobalClass(int v = 0)
{
this->m_value = v;
}
int GlobalClass::get_value()
{
return this->m_value;
}
void GlobalClass::set_value(int v)
{
this->m_value = v;
}
static GlobalClass GlobalClass::*instance()
{
if (!s_instance)
s_instance = new GlobalClass;
return s_instance;
}
main.cpp:
#include "sing.hpp"
int main()
{
GlobalClass *s=0;
}
命令和错误为:
~/workspace/singleton$ g++ main.cpp sing.cpp
sing.cpp: In function ‘GlobalClass GlobalClass::* instance()’:
sing.cpp:19:10: error: ‘s_instance’ was not declared in this scope
sing.cpp:2:1: error: ‘GlobalClass::GlobalClass(int)’ is private
sing.cpp:20:23: error: within this context
sing.cpp:21:12: error: ‘s_instance’ was not declared in this scope
static GlobalClass GlobalClass::*instance()
{
if (!s_instance)
s_instance = new GlobalClass;
return s_instance;
}
此定义上不应该有static
标记。只有声明。
实际上,您并没有定义成员函数;如果你提供了一个s_instance
变量,你会,那么就会得到错误。
此外,*
位于错误的位置。
您稍后还会得到关于s_instance
的链接错误,因为您没有定义它。
您对instance
的定义有两个错误:
static
限定符错误返回类型的语法被打乱了。指针属于类型,而不是函数的名称:
GlobalClass* GlobalClass::instance() { if (!s_instance) s_instance = new GlobalClass; return s_instance; }
此外,您还需要定义静态成员s_instance
,正如其他人所指出的那样。
GlobalClass* GlobalClass::s_instance = 0;
但这段代码还有另一个问题:它会泄漏内存。不要使用原始指针。
最后,这个代码不是线程安全的,在某些情况下这可能是一个巨大的问题。假设您可以保证您的代码永远不会在多线程场景中运行,那么继续吧。否则,你可能想改变它(谁能提供如此有力的保证呢?)。
在sing.cpp中,您需要实例化s_instance
,如下所示:
GlobalClass * GlobalClass::s_instance = NULL;
cpp文件中的函数static GlobalClass GlobalClass::*instance()
不应该有static
关键字。
必须定义和声明静态标识符。
所以,把s_instance
放在你的sing.cpp
里。我认为你应该将它初始化为NULL。
相关文章:
- CMake项目Boost库错误:Boost/config/compiler/gcc.hpp:165:10:致命错误:cs
- 什么是"#include <boost/functional/hash.hpp> "?
- 使用Vulkan hpp vk::enumerateInstanceVersion()会导致segfault
- 如何将class.cpp和class.hpp编译为一个.o文件
- g++ -I 和 -L 命令来查找不起作用的 .hpp 文件
- VS Code C++:不准确的系统包括路径错误(wchar.h,boost/lambda/lambda.hpp)
- Gnuplot_i.hpp C++接口绘制局部变量而不是文件
- 致命错误:找不到'boost/uuid/uuid.hpp'文件
- BGL:当包含 random_spanning_tree.hpp 时,对strong_components的调用无法编译
- 造成致命错误:boost/fusion/iterator/equal_to.hpp 没有这样的文件或目录
- 无法使包含.hpp文件与其中的2个文件一起使用
- 在指向现有内存地址的 hpp 文件中声明成员函数的最佳方法
- 无法打开包含文件'Graphics.hpp'没有这样的文件或目录,Visual Studio的其他包含不起作用
- 编译器正在查找.当"实施"完全在"我的"中时的CPP文件.HPP文件
- 我的项目中某些仅标头文件不能包含使用 CMake 和 Vscode 的"SFML/Graphics.hpp"
- QtCreator使用CMAKE_C_FLAGS来解释C++(hpp)标头
- 如何正确使用hpp文件和cpp文件中的嵌套类
- 错误: C1083: 无法打开包含文件:"boost/asio.hpp": 没有此类文件或目录
- C++ Boost-iostream:包含 filtering_streambuf.hpp 时出现神秘错误
- cpp hpp separation