c++ - 使用 Visual Studio 2012 编译时,此代码会出现错误,但使用代码块就可以了

标签 c++ visual-studio-2012 constants codeblocks

#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”的列下的第一个单元格的值。使用代码块时,这段代码已经没问题了。但我需要使用 Visual Studio。

最佳答案

这个

vector<string> data[rowCount];

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

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

您可以使用 vector 的 vector 来代替数组,例如

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

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

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

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

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

关于c++ - 使用 Visual Studio 2012 编译时,此代码会出现错误,但使用代码块就可以了,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59349006/

相关文章:

C++ "was not declared in this scope"在派生类中覆盖纯虚方法时

c++ - 与第三方公共(public)图书馆/代码接口(interface)

c# - PowerShell 和服务器管理器模块的跨平台系统库引用

c - 将 memcpy 与具有常量成员的目标结构一起使用是否合法?

c++ - 为什么 operator++ 返回一个非常量值?

c - 为什么下面会产生segmentation fault呢?

c++ - public const 不会覆盖 private const 函数吗?

c++ - 如何判断文件刷新在关闭文件之前确实有效?

c# - 将 MySQL 连接到 Visual Studio C#

visual-studio-2012 - 如何在 Visual Studio 2012 中包含 TypeScript 文件并编译整个文件?