Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 错误C2227:x27的左侧-&燃气轮机'&引用;函数名";模板类错误_C++_Templates - Fatal编程技术网

C++ 错误C2227:x27的左侧-&燃气轮机'&引用;函数名";模板类错误

C++ 错误C2227:x27的左侧-&燃气轮机'&引用;函数名";模板类错误,c++,templates,C++,Templates,编辑:谢谢你们 我目前正在创建一个模板资源管理器类,它在实际代码中没有显示任何错误,但是当我编译时,我遇到了其中一些错误 错误C2227:“->getHandle”的左侧必须指向class/struct/union/generic类型 template <class T> unsigned int ResourceManager<T>::add(string& name, string& path) { T* resource = getResou

编辑:谢谢你们

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

错误C2227:“->getHandle”的左侧必须指向class/struct/union/generic类型

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;
}
我从中获得了各种资源,我使用这些资源就像

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

ResourceManager<Model*> modelResourceManager;
modelResourceManager.add("model.obj", "models/");
//只是一个简单的例子
类模型:公共资源
{ };
ResourceManager模型ResourceManager;
modelResourceManager.add(“model.obj”、“models/”);
这里有我遗漏的东西吗?我在ResourceManager.h中包含了“Resource.h”,甚至还包含了具体的实现,例如“model.h”,但我仍然会遇到这个错误


这可能是非常琐碎的,我只是盯着这完全太久了,但帮助将不胜感激

resource
是一个
T*
,但在您的例子中,
T
Model*
,因此
resource
属于
Model**

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

所以
resource->
无效<代码>(*资源)->
将是;或者,您可能打算使用
Model
作为模板参数

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

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