Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/128.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++ C++;简单变型增压器_C++_Boost - Fatal编程技术网

C++ C++;简单变型增压器

C++ C++;简单变型增压器,c++,boost,C++,Boost,我正在尝试使用变量boost创建一个对象列表 #include <string> #include <list> #include <iostream> #include <boost/variant.hpp> using namespace std; using namespace boost; class CSquare; class CRectangle { public: CRectangle(); }; class CS

我正在尝试使用变量boost创建一个对象列表

#include <string>
#include <list>
#include <iostream>
#include <boost/variant.hpp>

using namespace std;
using namespace boost;   

class CSquare;

class CRectangle {
public:
  CRectangle();
};

class CSquare {
public:
  CSquare();
};

int main()
{   typedef variant<CRectangle,CSquare, bool, int, string> object;

    list<object> List;

    List.push_back("Hello World!");
    List.push_back(7);
    List.push_back(true);
    List.push_back(new CSquare());
    List.push_back(new CRectangle ());

    cout << "List Size is: " << List.size() << endl;

    return 0;
}
我意识到,如果我使用以下表格,一切都会很好:

CSquare x;
CRectangle y;
List.push_back("Hello World!");
List.push_back(7);
List.push_back(true);
List.push_back(x);
List.push_back(y);
但如果可能的话,我想避免使用这种形式,因为我想不命名我的对象。这是我的系统的一项重要要求-我有没有办法避免使用命名对象?

而不是列表。向后推(new CSquare());只要写

List.push_back(CSquare());

还要编写构造函数的定义

只需更改一些内容,它就可以工作了:

#include <iostream>
#include <list>
#include <string>
#include <boost/variant.hpp>
using namespace std;
using namespace boost;   

class CRectangle
{
public:
 CRectangle() {}
};

class CSquare
{
public:
 CSquare() {}
};

int main()
{
 typedef variant<CRectangle, CSquare, bool, int, string> object;
 list<object> List;
 List.push_back(string("Hello World!"));
 List.push_back(7);
 List.push_back(true);
 List.push_back(CSquare());
 List.push_back(CRectangle());

 cout << "List Size is: " << List.size() << endl;

 return 0;
}
#包括
#包括
#包括
#包括
使用名称空间std;
使用名称空间boost;
类交叉角
{
公众:
CRectangle(){}
};
类CSquare
{
公众:
CSquare(){}
};
int main()
{
类型定义变量对象;
名单;
列表。向后推(字符串(“Hello World!”);
列表。推回(7);
列表。推回(true);
List.push_back(CSquare());
List.push_back(CRectangle());

您是否忘记实现构造函数
CRectangle::CRectangle()
CSquare::CSquare()

或者在类之外的某个地方实现它们,例如:

CRectangle::CRectangle()
{ 
    // :::
}; 
…或在类内实现它们:

class CRectangle {
public:
  CRectangle()
  { 
    // :::
  }
}; 
…或完全删除构造函数声明:

class CRectangle {
public:
}; 
class CRectangle {
public:
};