getHandle' 的左侧必须指向类/结-6ren">
gpt4 book ai didi

c++ - 错误 C2227 : left of '->' "function name" template class error

转载 作者:搜寻专家 更新时间:2023-10-31 00:18:20 27 4
gpt4 key购买 nike

编辑:谢谢你们!

我目前正在创建一个模板资源管理器类,它在实际代码中没有显示任何错误,但是当我编译时,我遇到了其中的一些问题

error C2227: '->getHandle' 的左侧必须指向类/结构/union/泛型类型

template <class T>
unsigned int ResourceManager<T>::add(string& name, string& path)
{
T* resource = getResource(name, path);

if (resource != nullptr)
{
resource->incrementCount(); // doesn't like
return resource->getHandle(); // these lines calling member functions
}
else
unsigned int handle;
bool freeHandle = false;

if (!m_freeHandles.empty())
{
handle = m_freeHandles.top();
m_freeHandles.pop();
freeHandle = true;
}
else
{
handle = m_resourceList.size();
freeHandle = false;
}

T* newResource = new T(handle, name, path);

if (!freeHandle)
m_resourceList.push_back(newResource);
else
m_resourceList[handle] = newResource;

return newResource->getHandle();
}
return -1;
}

对于每个资源,我都有一个基类资源,看起来像

class Resource
{
public:

Resource(unsigned int handle, string& name, string& path);
Resource(string& name, string& path);
virtual ~Resource();
string getFileName() { return m_filename; }
void setFileName(string filename) { m_filename = filename; }
string getFilePath() { return m_filepath; }
void getFilePath(string filePath) { m_filepath = filePath; }
string getName() { return m_name; }
void getName(string name) { m_name = name; }
unsigned int getHandle() { return m_handle; }
void setHandle(unsigned int handle) { m_handle = handle; }
void incrementCount() { m_referenceCount++; }
void decrementCount() { m_referenceCount--; }
int getReferenceCount() { return m_referenceCount; }

protected:

string m_filename;
string m_filepath;
string m_name;
unsigned int m_handle;
int m_referenceCount;
};

我正在从中获取各种资源,我喜欢使用...

// just an abbreviated example
class Model : public Resource
{ };

ResourceManager<Model*> modelResourceManager;
modelResourceManager.add("model.obj", "models/");

我在这里遗漏了什么吗?我在 ResourceManager.h 中包含了“Resource.h”,甚至包含了特定的实现,例如“model.h”,但我仍然收到此错误。

这可能是非常微不足道的,我已经盯着它看太久了,但我们将不胜感激。

最佳答案

您正在实例化 modelResourceManager 并将模板参数设置为 Model*。也就是说,T 将是模板化代码中的 Model*,因此 resourcenewResource(它们是 T*) 将是 Model** - 即指向指向Model 的指针。

因此 resource-> 无效。 (*resource)-> 会是;或者您可能打算使用 Model 作为模板参数。

关于c++ - 错误 C2227 : left of '->' "function name" template class error,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10820061/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com