我在调用 vector 的 size()
时遇到此编译器错误。为什么?
#include <vector>
#include <iostream>
#include <fstream>
#include <sstream>
#include <string>
#include <cassert>
using namespace std;
class Vertex {
float firstValue;
float secondValue;
float thirdValue;
Vertex (float first, float second, float third){
firstValue=first;
secondValue=second;
thirdValue=third;
}
};
int main()
{
cout<<"This program loads a 3D .off object. \nEnter the name of the file that describes it "<<endl;
string inputFileName;
getline(cin, inputFileName);
ifstream inputFileStream;
inputFileStream.open(inputFileName.data());
assert (inputFileStream.is_open());
string actualLine;
for(;;){
inputFileStream>>actualLine;
istringstream actualLineStream(actualLine);
std::vector<float> results( std::istream_iterator<int>(actualLineStream)
, std::istream_iterator<int>() );
int resultsIndex=0;
int resultsSize=results.size(); //WHY??
while (resultsIndex<resultsSize){
cout<<results[resultsIndex]<<endl;
}
if (inputFileStream.eof()) break;
}
ofstream outputChannel;
while (true){} // to keep on console view
return 0;
}
最佳答案
信不信由你,这行没有声明std::vector
的实例命名为 results
,调用带有开始和结束迭代器的构造函数:
std::vector<float> results(std::istream_iterator<int>(actualLineStream),
std::istream_iterator<int>());
这实际上声明了一个函数,叫做results
接受一个名为 actualLineStream
的参数和另一个未命名的参数,类型均为 std::istream_iterator<int>
.
一般在C++中,如果某个东西看起来像一个函数,它会被解析为一个; C++ 标准需要它。这实际上是为了向后兼容 C - 但这太违反直觉了,它甚至有自己的名字:"most vexing parse" .如果遇到最棘手的解析,一些编译器甚至会发出警告。
这与这两行在C++中不等价有关:
Foo bar; // Declares an instance of Foo named bar
Foo bar(); // Declares a function named bar that takes no parameters and returns a Foo
要修复它,您可以在其中一个参数周围添加更多括号:
// +--------- Note extra parentheses!! ---------+
// | |
// V V
std::vector<float> results((std::istream_iterator<int>(actualLineStream)),
std::istream_iterator<int>());
或者简单地单独声明每个迭代器:
std::istream_iterator<int> resultsBegin(actualLineStream);
std::istream_iterator<int> resultsEnd;
std::vector<float> results(resultsBegin, resultsEnd);
关于c++ - 错误 C2228 : left of '.size' must have class/struct/union,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4175971/