Dra*_*nir 2 c++ static-methods static-members
在过去的几年里,我被C#编码所困扰,现在我又回到了C++,并发现我遇到的问题很简单.我正在使用名为DarkGDK的gamedev的第三方库(任何以db为前缀的命令),但DGDK不是问题.
继承我的代码:
system.h中
#pragma once
#include <string>
#include <map>
#include "DarkGDK.h"
using namespace std;
class System
{
public:
System();
~System();
void Initialize();
static void LoadImage(string fileName, string id);
static int GetImage(string id);
private:
map<string, int> m_images;
};
Run Code Online (Sandbox Code Playgroud)
System.cpp
#include "System.h"
System::System()
{
}
System::~System()
{
}
void System::Initialize()
{
dbSetDisplayMode (1024, 640, 32);
dbSetWindowTitle ("the Laboratory");
dbSetWindowPosition(100, 10);
dbSyncOn ();
dbSyncRate (60);
dbRandomize(dbTimer());
}
void System::LoadImage(string fileName, string id)
{
int i = 1;
while (dbImageExist(i))
{
i++;
}
dbLoadImage(const_cast<char*>(fileName.c_str()), i, 1);
m_images[id] = i;
}
int System::GetImage(string id)
{
return m_images[id];
}
Run Code Online (Sandbox Code Playgroud)
这里的想法是有一个映射,它将字符串映射到整数值,以使用字符串而不是硬编码值访问图像.此类未完成,因此它不处理卸载图像等任何操作.我想访问图像方法而不传递System的实例,所以我使用静态.
现在我收到这个错误:
blahblah\system.cpp(39):错误C2677:二进制'[':找不到全局运算符,它接受类型'std :: string'(或者没有可接受的转换)
如果我将地图更改为静态,我会收到此链接器错误:
1> System.obj:错误LNK2001:未解析的外部符号"private:static class std :: map,class std :: allocator>,int,struct std :: less,class std :: allocator >>,class std :: allocator ,类std :: allocator> const,int >>> System :: m_images"(?m_images @ System @@ 0V?$ map @ V?$ basic_string @ DU?$ char_traits @ D @ std @@ V?$ allocator @ d @ @@ 2 STD @@ HU?$ @少V'$ basic_string的@ DU?$ char_traits @ d @ @@ STD V'$分配器@ d @ @@ 2 STD @@@ 2 @ V'$分配器@ú ?$ @对CBV $$?$ basic_string的@ DU?$ char_traits @ d @ @@ STD V'$分配器@ d @ @@ 2 STD @@ H + STD @@@ 2 @@ STD @@ A)
你们中的任何人都可以帮助我吗?
第一个是编译器错误,因为您无法从静态方法访问非静态数据成员.this指针不会被隐含地传递给静态方法,因此它们无法访问绑定到实例的数据成员.
在秒的情况下,请注意这static map<string,int> m_images;只是变量的声明.您需要在源文件中定义静态成员变量map<string, int> System::m_images;.这将消除链接器错误.
| 归档时间: |
|
| 查看次数: |
2973 次 |
| 最近记录: |