模板 class 在 c++ 中另一个 class 中的实例化
template class instantiation in another class in c++
我有一个模板 class,当我在 main 中实例化时没有任何问题,但是当我尝试在另一个 class 中实例化时出现问题。有人可以请教我解决这个问题的方法吗
#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|错误:应在字符串常量之前使用“,”或“...”|
谢谢,
哈里斯
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 )
{
}
您想在 class propertyHandler
中声明字段。该语法不起作用,因为您不能声明一个字段并在同一位置为其赋值。
你可以delcare它,并在构造函数中初始化:
property<int> myIntProperty;
propertyHolder(): myIntProperty("name") {}
或使用 c++11 语法:
property<int> myIntProperty{"name"};
或者声明它是静态的,然后他们这样声明:
static property<int> myIntProperty;
和 class 声明之后:
property<int> propertyHolder::myIntProperty("name");
我有一个模板 class,当我在 main 中实例化时没有任何问题,但是当我尝试在另一个 class 中实例化时出现问题。有人可以请教我解决这个问题的方法吗
#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|错误:应在字符串常量之前使用“,”或“...”|
谢谢, 哈里斯
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 )
{
}
您想在 class propertyHandler
中声明字段。该语法不起作用,因为您不能声明一个字段并在同一位置为其赋值。
你可以delcare它,并在构造函数中初始化:
property<int> myIntProperty;
propertyHolder(): myIntProperty("name") {}
或使用 c++11 语法:
property<int> myIntProperty{"name"};
或者声明它是静态的,然后他们这样声明:
static property<int> myIntProperty;
和 class 声明之后:
property<int> propertyHolder::myIntProperty("name");