繁体   English   中英

使用 Visual Studio 2012 编译时,此代码给我错误,但使用代码块没问题

[英]This code gives me errors when compiled using visual studio 2012, but with codeblocks it is okay

#include <iostream>
#include <string>
#include <fstream>
#include <sstream>
#include <vector>
#include <iterator>

#define ADDR "c:\\Users\\Library2\\Desktop\\Books record\\"

using namespace std;

int main()
{
   ifstream fin(ADDR "reportcard.csv", ios::binary);
   string line;
   int rowCount=0;
   int rowIdx=0; 

   while(getline(fin,line)){
       rowCount++;
   }

   vector<string> data[**rowCount**];//this rowCount gave me "expression must have a constant value"

   fin.clear(); 
   fin.seekg(fin.beg); 

   while(getline(fin,line)) 
   {
      stringstream ss(line);  
      string value;
      while(getline(ss,value,',')){       
         data[rowIdx].push_back(value);
      }
      rowIdx++;   
   }

   fin.close();

   int colNum;
   string colName = "LAST PERSON";
   static int it;

   for(vector<string>::iterator it = data[0].begin(); it != data[0].end(); ++it)
   {
       if ((*it)== colName)
       {
           colNum = distance(data[0].begin(),it);//distance() gave me "no instances of function templates matches argument"
           break;
       }
   }
   cout << data[1][colNum] << "\t";

   return 0;
}
  1. 我试图弄清楚为什么它给了我表达式必须具有恒定值。
  2. 我试图找到另一个与 distance() 功能相同的函数,它可以在 Visual Studio 2012 中使用。

注意:此代码用于从名为“LAST PERSON”的列下的第一个单元格中查找和获取值。 使用代码块时,此代码已经可以了。 但我需要使用视觉工作室。

这个

vector<string> data[rowCount];

是一个可变长度数组的声明。

可变长度数组不是标准的 C++ 特性。 一些编译器有自己的语言扩展,允许使用变长数组。 其他编译器没有这样的语言扩展。

例如,您可以使用向量向量代替数组

std::vector<std::vector<std::string>> data;

注意文件是在binaru模式下打开的

ifstream fin(ADDR "reportcard.csv", ios::binary);

那么在一般情况下使用函数std::getline是不正确的。

while(getline(fin,line)){
    rowCount++;
}

当编译器看到这个:

vector<string> data[rowCount];

它从data开始,向右看。 它看到 '[' 并将data解释为 C 风格的数组。 然后它查看rowCount并检查它是否是编译时常量。 如果不是,则此代码不符合标准。 尽管如此,一些编译器仍允许将其作为语言扩展。

总而言之,您已经定义了一个 C 风格的rowCount类型的vector<string>元素数组。 您一定将 [] 误认为 () 或 {}。 很可能你想写

std::vector<std::string> data(rowCount); // a vector of rowCount strings 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM