Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/149.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++_Class_Visual C++_Pointers_Variable Assignment - Fatal编程技术网

C++ 使用文件输入创建变量

C++ 使用文件输入创建变量,c++,class,visual-c++,pointers,variable-assignment,C++,Class,Visual C++,Pointers,Variable Assignment,我希望有人能帮助我 我有一个文件,里面有很多可以重复的城市。例如: Lima, Peru Rome, Italy Madrid, Spain Lima, Peru 我已经用构造函数City(字符串cityName)创建了一个类City 大体上,我想为每个城市创建一个指针,如: City* lima = new City( City("Lima, Peru"); City* rome = new City( City("Rome, Italy"); 有没有办法通过循环读取文本中的行来

我希望有人能帮助我

我有一个文件,里面有很多可以重复的城市。例如:

Lima, Peru

Rome, Italy

Madrid, Spain

Lima, Peru
我已经用构造函数City(字符串cityName)创建了一个类City

大体上,我想为每个城市创建一个指针,如:

City* lima = new City( City("Lima, Peru"); 

City* rome = new City( City("Rome, Italy");
有没有办法通过循环读取文本中的行来实现这一点,例如:

City* cities = new City[];
int i = 0;
while( Not end of the file )
{
   if( read line from the file hasn't been read before )
     cities[i] =  City(read line from the file);   
}
有没有办法,或者我必须为每一个手动操作。有什么建议吗


谢谢您应该使用
City
对象的
std::vector
来存储实例。和
getline
应足以满足这种情况:

std::vector<City> v;
std::fstream out("out.txt"); // your txt file

for (std::string str; std::getline(out, str);)
{
    v.push_back(City(str));
}
std::vector v;
std::fstream out(“out.txt”);//你的txt文件
for(std::string str;std::getline(out,str);)
{
v、 推回(城市(str));
}

因为您只想列出一次城市,但它们可能会在文件中出现很多次,所以使用
集合
无序集合
是有意义的,这样插入只在第一次起作用

std::set<City> cities;
if (std::ifstream in("cities.txt"))
    for (std::string line; getline(in, line); )
        cities.insert(City(line));  // fails if city already known - who cares?
else
    std::cerr << "unable to open input file\n";    
std::设置城市;
if(std::ifstream in(“cities.txt”))
for(std::string line;getline(in,line);)
城市。插入(城市(线));//如果城市已经被知道了,那就失败了——谁在乎呢?
其他的

cerr不是一个答案,但是关于如何使用构造函数有一些奇怪的地方。要动态创建
City
对象,最好使用
City*lima=new City(“秘鲁利马”),而非
城市*lima=新城市(城市(“秘鲁利马”)。请参见此处:,反射对该要求有什么潜在用途?@TonyD我想他是在要求通过文件中的文本来命名变量。啊,是的-“City*lima=…”-谢谢-我没有注意到。谢谢大家,谢谢Tony。我现在明白了,我会用一套,因为我不想让城市重复……你们帮了大忙。谢谢lot@user2419831:有一件事-你需要一个
bool操作符