- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
过去几年我一直被 C# 编码宠坏了,现在我又回到了 C++ 并发现我在处理本应很简单的东西时遇到了麻烦。我正在为 gamedev 使用名为 DarkGDK 的第三方库(任何以 db 为前缀的命令),但是 DGDK 不是问题。
Đây là mã của tôi:
系统.h
#pragma once
#include
#include
#include "DarkGDK.h"
sử dụng không gian tên std;
class System
{
công cộng:
System();
~System();
void Initialize();
static void LoadImage(string fileName, string id);
static int GetImage(string id);
riêng tư:
map m_images;
};
系统.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))
{
tôi++;
}
dbLoadImage(const_cast(fileName.c_str()), i, 1);
m_images[id] = i;
}
int System::GetImage(string id)
{
return m_images[id];
}
这里的想法是有一个将字符串映射到整数值的映射,以使用字符串而不是硬编码值访问图像。这个类还没有完成,所以它不处理像卸载图像这样的事情。我想在不传递 System 实例的情况下访问图像方法,所以我使用了静态。
现在我得到这个错误:
blahblah\system.cpp(39) : error C2677: binary '[' : no global operator found which takes type 'std::string' (or there is no acceptable conversion)
如果我将映射更改为静态,我会收到此链接器错误:
1>System.obj : error LNK2001: unresolved external symbol "private: static class std::map,class std::allocator >,int,struct std::less,class std::allocator > >,class std::allocator,class 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?$less@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@2@V?$allocator@U?$pair@$$CBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@H@std@@@2@@std@@A)
你们中的任何聪明人都可以帮助我吗?
câu trả lời hay nhất
第一个是编译器错误,因为您无法从静态方法访问非静态数据成员。 cái này
指针不会隐式传递给静态方法,因此它们无法访问绑定(bind)到实例的数据成员。
在秒的情况下,注意 static map
只是变量的tuyên bố。您需要使用 map
来sự định nghĩa静态成员变量在源文件中。这将消除链接器错误。
关于c++ - 尝试使用静态方法/成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3455394/
Tôi muốn hiểu cách hoạt động của phương thức Ruby(). Tôi đã thử tìm kiếm trên Google bằng "phương pháp Ruby" nhưng đó không phải là thứ tôi cần. Tôi cũng đã xem ruby-doc.org nhưng tôi không tìm thấy phương pháp này.
Phương thức Kiểm tra thực hiện tìm kiếm biểu thức chính quy trên chuỗi đã chỉ định và trả về giá trị Boolean cho biết liệu có tìm thấy mẫu phù hợp hay không. Đối tượng tham số object.Test(string) là bắt buộc. luôn luôn là một
Phương thức Thay thế thay thế văn bản được tìm thấy trong tìm kiếm biểu thức chính quy. Đối tượng tham số object.Replace(string1, string2) là bắt buộc. Luôn là tên của đối tượng RegExp.
Phương thức Raise tạo ra một đối tượng lỗi thời gian chạy.Raise(số, nguồn, mô tả, tệp trợ giúp, bối cảnh trợ giúp) Đối tượng tham số phải là
Phương thức Thực thi thực hiện tìm kiếm biểu thức chính quy trên chuỗi đã chỉ định. Đối tượng tham số object.Execute(string) là bắt buộc. Luôn là tên của đối tượng RegExp. sợi dây
Phương thức Clear xóa tất cả các cài đặt thuộc tính của đối tượng Err. object. Đối tượng Clear phải là tên của đối tượng Err. Mô tả Sau khi xử lý lỗi, hãy sử dụng Clear để xóa rõ ràng đối tượng Err. cái này
Phương thức CopyFile sao chép một hoặc nhiều tệp từ vị trí này sang vị trí khác. object.CopyFile đối tượng tham số nguồn, đích [, ghi đè] được yêu cầu
Phương thức Sao chép sao chép tệp hoặc thư mục được chỉ định từ vị trí này sang vị trí khác. đối tượng tham số object.Copy đích [, ghi đè] là bắt buộc. Nên là Tệp hoặc F
Phương thức Close đóng tệp TextStream đang mở. Đối tượng object.Close phải là tên của đối tượng TextStream. Ví dụ sau minh họa cách sử dụng phương thức Close.
Phương thức BuildPath thêm tên vào đường dẫn hiện có. Đối tượng tham số object.BuildPath(path, name) là bắt buộc. Phải là tên của đối tượng FileSystemObject
Phương thức GetFolder trả về đối tượng Thư mục tương ứng với một thư mục trong đường dẫn đã chỉ định. Đối tượng tham số object.GetFolder(folderspec) là bắt buộc. Phải là FileSy
Phương thức GetFileName trả về tệp hoặc thư mục cuối cùng tại đường dẫn đã chỉ định (không phải một phần của đường dẫn ổ đĩa đã chỉ định). Đối tượng tham số object.GetFileName(pathspec) là bắt buộc. nên
Phương thức GetFile trả về một đối tượng File tương ứng với một tệp trong đường dẫn đã chỉ định. Đối tượng tham số object.GetFile(filespec) là bắt buộc. FileSystemObject dự kiến
Phương thức GetExtensionName trả về một chuỗi chứa tên phần mở rộng của thành phần cuối cùng của đường dẫn. Đối tượng tham số object.GetExtensionName(path) là bắt buộc. trả lời
Phương thức GetDriveName trả về một chuỗi chứa tên ổ đĩa trong đường dẫn đã chỉ định. Đối tượng tham số object.GetDriveName(path) là bắt buộc. Đối tượng hệ thống tệp dự kiến
Phương thức GetDrive trả về đối tượng Drive tương ứng với ổ đĩa trong đường dẫn đã chỉ định. object.GetDrive đối tượng tham số drivespec là bắt buộc. Hệ thống tệp dự kiếnO
Phương thức GetBaseName trả về một chuỗi chứa tên cơ sở của tệp (không có phần mở rộng) hoặc thư mục trong đặc tả đường dẫn được cung cấp. Đối tượng tham số object.GetBaseName(path) là bắt buộc
Phương thức GetAbsolutePathName trả về một đường dẫn đầy đủ và được xác định rõ ràng từ đường dẫn đã chỉ định được cung cấp. Đối tượng tham số object.GetAbsolutePathName(pathspec)
Phương thức FolderExists trả về True nếu thư mục được chỉ định tồn tại; nếu không nó sẽ trả về Sai. Cần có đối tượng tham số object.FolderExists(folderspec)
Phương thức FileExists trả về True nếu tệp được chỉ định tồn tại; nếu không nó sẽ trả về Sai. Đối tượng tham số object.FileExists(filespec) là bắt buộc. Phải là FileS
Tôi là một lập trình viên xuất sắc, rất giỏi!