2013-04-30 111 views
-1

我的程序需要两个输入文件,其中之一是一个命令列表。文件的每一行都是一个新的命令,所以我想把这个文件解析成一个数组。我被告知要在动态增长时使用一个矢量,这样就不需要函数来计算文件中的行数,然后使用该数据来创建数组。我不明白为什么我得到这个有关向量的错误

这是我的计划是什么现在:

#include<iostream> 
#include<string> 
#include<fstream> 
#include<vector> 
using namespace std; 


//Prototypes 
int parseLines(ifstream& countfile); 


vector<string> parseLines(ifstream& countfile) 
//counts number of lines in file passed to function 
{ 
    string line; 
    vector<string> lines; 
    int numberOfLines; 

    //reads through each line until end of file putting each line in a sperate entry of the vector 
    while(getline(countfile, line)) 
    { 
     lines.push_back(line); 
    } 

    return lines; 
} 


int main (int argc, char* argv[]) 
{ 

     int i; 

    if(argc != 3) cout << "Usage: calendar.out datafile inputfile"; 

    //Create input streams to both files 
    ifstream apptsfp; 
    ifstream inputfp; 

    //Open streams to both files 
    apptsfp.open(argv[1]); 
    inputfp.open(argv[2]); 

    if(!inputfp.is_open()) 
    { 
     cerr << "failed to open input file\n"; 
     return 1; 
    } 

     vector<string> inputVector; 
     vector<string> apptsVector; 

    inputVector = parseLines(inputfp); 

     for(i=0; i<= inputVector.size(); i++) 
     { 
     cout << "Input " << i << ": " << inputVector[i] << endl; 
     } 

    return 0; 
} 

当我编译我得到这个长的错误,我不很明白:

$ g++ calendar.cpp 
calendar.cpp: In function ‘std::vector<std::basic_string<char> > parseLines(std::ifstream&)’: 
calendar.cpp:17:46: error: new declaration ‘std::vector<std::basic_string<char> > parseLines(std::ifstream&)’ 
calendar.cpp:14:5: error: ambiguates old declaration ‘int parseLines(std::ifstream&)’ 
calendar.cpp: In function ‘int main(int, char**)’: 
calendar.cpp:58:37: error: no match for ‘operator=’ in ‘inputVector = parseLines((* & inputfp))’ 
calendar.cpp:58:37: note: candidate is: 
In file included from /usr/include/c++/4.7/vector:70:0, 
       from calendar.cpp:9: 
/usr/include/c++/4.7/bits/vector.tcc:161:5: note: std::vector<_Tp, _Alloc>& std::vector<_Tp, _Alloc>::operator=(const std::vector<_Tp, _Alloc>&) [with _Tp = std::basic_string<char>; _Alloc = std::allocator<std::basic_string<char> >] 
/usr/include/c++/4.7/bits/vector.tcc:161:5: note: no known conversion for argument 1 from ‘int’ to ‘const std::vector<std::basic_string<char> >&’ 

我觉得我不不太了解如何使用矢量。

+2

你不能重载基于返回类型。 – 2013-04-30 07:30:57

回答

6

原型

int parseLines(ifstream& countfile); 

实现

vector<string> parseLines(ifstream& countfile) 

返回类型不同。

+1

ayup。它的官员,我很愚蠢。 – SudoSilman 2013-04-30 07:34:20

+0

@Aaron你明白你得到的编译器错误吗?如果你明白这一点会好得多,而不是理解实际出错的地方。 – Default 2013-04-30 07:35:57

0

问题出在int parseLines(ifstream& countfile);函数声明。没有与后来vector<string> parseLines(ifstream& countfile)定义冲突:

变化首先:

vector<string> parseLines(ifstream& countfile); 

此外,由于该功能的定义是其使用之前,你可以删除它的声明。

2

不是问题,但问另一个错误是

for (i = 0; i <= inputVector.size(); i++) 

应该

for (i = 0; i < inputVector.size(); i++) 
相关问题