【问题标题】:Initialize a vector of objects in C++ [duplicate]在C ++中初始化对象向量[重复]
【发布时间】:2018-10-09 15:50:34
【问题描述】:

我的问题如下:我有一个名为 City 的类,其参数为 Name、Latitude 和 Longitude。在我的主课中,我想用一些城市初始化一个向量。

这是我的城市头文件:

using namespace std;

#define RADIUS 6378.137
#define PI 3.14159265358979323846


class City {

public:
City(string _name, double _latitude, double _longitude) {
    name = _name;
    longitude = _longitude * PI / 180.0;
    latitude = _latitude * PI / 180.0;
}
~City() { };

private:
double longitude;
double latitude;
string name;
double earthRadius = RADIUS;
};

然后是我的主类文件:

#include <iostream>
#include <vector>
#include "Route.h"

using namespace std;

vector<City> initRoute { (("Boston", 42.3601, -71.0589),
("Houston", 29.7604, -95.3698), ("Austin", 30.2672, -97.7431),
("San Francisco", 37.7749, -122.4194), ("Denver", 39.7392, -104.9903),
("Los Angeles", 34.0522, -118.2437), ("Chicago", 41.8781, -87.6298)) };

int main() {

    //for each(City city in initRoute)
        //city.printCity;

    system("pause");
    return 0;
}

当我尝试编译时,它会显示错误 C2398:

Error   C2398   Element "1": Die Conversion from "double" to  "unsigned int" 
requires a restrictive conversion.

我感觉我的向量初始化是错误的,但我不知道要改变什么。

感谢您的帮助:)

【问题讨论】:

  • 创建City 对象使用例如City("Boston", 42.3601, -71.0589)。并删除额外的一对括号 () 包裹它。
  • 将您的 () 更改为 {}。列表初始化需要{}
  • 您可以做的一件事是尝试弄清楚如何使用 one 元素初始化向量,然后再将问题与整个元素列表复杂化。

标签: c++ class object vector


【解决方案1】:

在将对象添加到vector 时,您必须指定对象的类型。

vector<City> initRoute { City("Boston", 42.3601, -71.0589),
City("Houston", 29.7604, -95.3698), ... };

或者

您可以使用{} 来表示对象而无需明确提及类,因为您的向量包含City 对象(就像您使用structs 一样)。

vector<City> initRoute { {"Boston", 42.3601, -71.0589},
    {"Houston", 29.7604, -95.3698}, ... };

【讨论】:

    猜你喜欢
    • 2017-01-11
    • 2012-02-12
    • 2015-12-03
    • 1970-01-01
    • 2011-01-17
    • 2012-06-21
    • 2023-03-17
    • 1970-01-01
    • 2013-07-23
    相关资源
    最近更新 更多