我正在尝试使用整数向量来存储来自文本文件的未知数量的正整数。一般来说,我没有将数据推送到向量中的问题,但在这种情况下,当我尝试将一个整数从fstream推送到我的向量时,我遇到了编译错误。我可以使用动态数组或堆栈,但我坚持学习使用向量。我的代码如下:
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
vector<size_t> nTxtToVec(string);
void main() {
vector<size_t> allP = nTxtToVec("primes.txt");
for (size_t i : allP) // test all integers inside vector
cout << i << ' ';
cout << "\n\nPress any key to return...";
cin.clear();
cin.ignore(10000, '\n');
return;
}
vector<size_t> nTxtToVec(string fin) {
vector<size_t> v;
size_t n = NULL;
char c;
fstream is;
is.open(fin, ios::in);
while (!is.eof()) {
is.get(c);
while (c >= '0' && c <= '9') {
if (n == NULL)
n = c - '0';
else
n = (n * 10) + (c - '0');
is.get(c);
}
if (n != NULL) {
v.push_back(n);
n = NULL;
}
}
is.close();
return v;
}
使用此代码,我收到一个错误和一个警告:
error C2440: 'initializing' : cannot convert from 'std::vector<int,std::allocator<_Ty>>' to 'int'
和
warning C4018: '<' : signed/unsigned mismatch
我用过&#34; size_t&#34;替换我所有的&#34; int&#34;数据类型尝试避免签名/无符号不匹配警告,但编译器说同样的事情,即使文本文件只包含正整数和空格。我也尝试在main()中初始化向量并将向量传递给void函数,而不是使用向量作为函数返回类型。我是C ++的新手,请原谅我,如果没有明显或愚蠢的做法。
答案 0 :(得分:0)
除了while(!is.eof())
之外的其他逻辑错误,如果您将void main()
替换为int main()
(根据C ++标准应该是这样),您的代码就会编译,并删除{来自return;
的最后一行的{1}}。除非您想要返回与main()
不同的内容(向操作系统发出异常程序错误信号),否则0
中不需要return 0;
,它会自动返回main()
Live example on ideone(g ++)或rextester.com(VC ++)