简体   繁体   中英

template class instantiation in another class in c++

I have a template class that when I instantiate in main doesn't have any issues but when i try instantiating the same in another class is giving issues. can someone please enlighten me on the solution for this

#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");
}

the above code compiles with out any issue. but

#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");
};

this code is not getting compiled. giving me error like

main.cpp|19|error: expected identifier before string constant| main.cpp|19|error: expected ',' or '...' before string constant|

Thanks, Harish

property<int> myIntProperty("myIntProperty");

This is a function declaration, so it expects you to insert a default argument after identifying it, like string s = "myIntProperty" .

Perhaps you want to initialize an object called myIntProperty ,

property<int> myIntProperty {"myIntProperty"};

This can be done in C++11, but you can also initialize it in the constructor initializer list,

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

// Source
propertyHolder::propertyHolder( string s ) :
    myIntProperty( s )
{
}

You wanted to declare field in class propertyHandler . That syntax is not working because you cannot declare a field and assing it value at the same spot.

You can delcare it, and initialise in constructor:

property<int> myIntProperty;

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

or with c++11 syntax:

property<int> myIntProperty{"name"};

or declare it static, and them declare like that:

static property<int> myIntProperty;

and after class declaration:

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM