带有多个类对象的向量会产生编译错误吗?

时间:2014-11-15 17:03:42

标签: c++ vector compiler-errors declaration

对于下面的类,我想制作一个包含10个Ship()对象的向量
但是这会产生以下编译错误来自' int'的无效转换到#char; char *' [-fpermissive]
(如果我省略矢量线,它编译得很好)
我做了一点搜索,找不到答案。

class Ship
{

protected:
        std::string name;
public:
        Ship(std::string name="Ship")
        {
          std::ostringstream tmp;
          std::string temp;
          tmp << name << ++id;
          name = tmp.str();
        }
};

main()

中的矢量声明
#include <iostream>
#include <vector>
#include <string>
#include "Ship.h"
using std::cout;
using std::endl;
using std::vector;
int main()
{
     vector<Ship> Shipyard; //10% of map dimension is number of ships
     Shipyard.push_back(Ship(10)); //push_back(Ship(),10); doesn't work also
}

3 个答案:

答案 0 :(得分:1)

您正在构建一个Ship对象,其值为10。由于构造函数采用std::string,因此无法将整数传递给构造函数。

添加10艘船:

std::vector<Ship> ShipYard(10);

std::vector<Ship> ShipYard;
ShipYard.resize(10);

答案 1 :(得分:1)

构造函数采用std::string,但您传递的是整数

对于同名的10个对象构造,请使用constructor of std::vector第2个表单

vector<Ship> Shipyard( 10, Ship() ); 

答案 2 :(得分:0)

Ship(10)

这将尝试创建一个Ship对象并调用构造函数。但是,构造函数将string作为参数,因此会出错。

创建10 Ship使用的向量:

vector<Ship> Shipyard(10, Ship());