0

我有一个模板类,当我在 main 中实例化时没有任何问题,但是当我尝试在另一个类中实例化它时会出现问题。有人可以告诉我解决方案吗

#include<iostream>
#include<string>
using namespace std;

template <class T>
class property {
public:
    property(string name)
    {
        propertyName= name;
    }
private:
    T item;
    string propertyName;
};
main()
{
    property<int> myIntProperty("myIntProperty");
}

上面的代码编译没有任何问题。但

#include<iostream>
#include<string>
using namespace std;

template <class T>
class property {
public:
    property(string name)
    {
        propertyName= name;
    }
private:
    T item;
    string propertyName;
};

class propertyHolder
{
    property<int> myIntProperty("myIntProperty");
};

这段代码没有被编译。给我错误

main.cpp|19|错误:字符串常量之前的预期标识符| main.cpp|19|错误:字符串常量前应有 ',' 或 '...'|

谢谢, 哈里什

4

2 回答 2

2
property<int> myIntProperty("myIntProperty");

这是一个函数声明,因此它希望您在识别它之后插入一个默认参数,例如string s = "myIntProperty".

也许您想初始化一个名为 的对象myIntProperty

property<int> myIntProperty {"myIntProperty"};

这可以在 C++11 中完成,但您也可以在构造函数初始化程序列表中对其进行初始化,

// Header
class propertyHolder {
public:
    propertyHolder( string s );
private:
    property<int> myIntProperty;
};

// Source
propertyHolder::propertyHolder( string s ) :
    myIntProperty( s )
{
}
于 2015-10-04T11:32:21.573 回答
0

您想在 class 中声明字段propertyHandler。该语法不起作用,因为您不能在同一位置声明一个字段并为其赋值。

您可以删除它,并在构造函数中初始化:

property<int> myIntProperty;

propertyHolder(): myIntProperty("name") {}

或使用 c++11 语法:

property<int> myIntProperty{"name"};

或将其声明为静态,然后他们声明如下:

static property<int> myIntProperty;

在类声明之后:

property<int> propertyHolder::myIntProperty("name");
于 2015-10-04T11:39:02.973 回答