c ++中另一个类中的模板类实例化

时间:2015-10-04 11:28:55

标签: c++ template-classes

我有一个模板类,当我在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 | error:字符串常量前的预期标识符 main.cpp | 19 |错误:预期&#39;,&#39;或者&#39; ...&#39;在字符串常量之前|

谢谢, 哈里什

2 个答案:

答案 0 :(得分: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 )
{
}

答案 1 :(得分:0)

您想要在班级propertyHandler中声明字段。该语法不起作用,因为您无法在同一位置声明字段并确定其值。

你可以对它进行delcare,并在构造函数中初始化:

property<int> myIntProperty;

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

或使用c ++ 11语法:

property<int> myIntProperty{"name"};

或将其声明为静态,并且它们声明如下:

static property<int> myIntProperty;

和课后声明:

property<int> propertyHolder::myIntProperty("name");