(C ++)试图记住定义函数的位置

时间:2014-03-12 03:53:26

标签: c++

我接触C ++已经有一段时间了,但是我正在写我的主要内容我有一个名为“解决方案”的函数,现在该行给了我错误:“在'{'之前不允许函数定义“

之后我认为我应该在main()之后编写我的函数定义,但这导致了另一个错误。

另外,正如我的代码所示,当我调用我的函数解决方案并将其传递给我的outfile时,我得到“无效参数”的错误。

我也在输入结尾的“预期'{'的最后'{'上得到错误。”

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


int main(int argc, char** argv) {
    ifstream infile("TEST.txt", std::ifstream::in);
    string line;
    vector<string> inputLines;

    if(infile.is_open()){
        while(getline(infile, line)){
            cout << line << '\n';
            inputLines.push_back(line);
        }
    }

    infile.close();






    ofstream outfile("output.txt", std::ofstream::out);
    for(unsigned int i = 1; i < inputLines.size(); i+= 3){
        int credit = inputLines[i];
        int numofItems = inputLines[i+1];
        int numofItemscopy = inputLines[i+1];

        vector<int> items;
        stringstream ssin(inputLines[i+2]);
        int x = 0;
        while(ssin.good() && x < numofItems){
            ssin >> items[x];
            ++x;
        }
        outfile << solution(credit,
                            numofItems,
                            numofItemscopy,
                            items.size());


        outfile << inputLines[i] << '\n';
    }
    outfile.close();
    return 0;
}


string solution(int cred, vector<int> original, vector<int> copy, int size){
        for(int i = 0; i < size; i++ ){
            for (int ii = 0; ii < size; ii++){
                if(original[i] + copy[ii] == cred){
                    return std::string(i) + std::string(ii);
                }
            }
        }
        return "";
    }

编辑:

我把我的解决方案功能放在我的主要之后,现在我收到以下错误:

在所有三行:

        int credit = inputLines[i];
        int numofItems = inputLines[i+1];
        int numofItemscopy = inputLines[i+1];

我收到错误:“无法将'std :: basic_string'转换为'int'初始化”

当我打电话给我的“解决方案”功能时:

outfile << solution(credit,
                numofItems,
                numofItemscopy,
                items.size());

我收到错误“未在此范围内声明解决方案。”

2 个答案:

答案 0 :(得分:1)

首先,在主函数中使用之前,需要声明函数。然后,如果您愿意,可以在主函数之后定义它。编译器从上到下,它只知道它到目前为止所看到的内容。当你在main中调用它时,编译器还没有看到解决方案函数,因此它不知道该怎么做。

string solution(int cred, vector<int> original, vector<int> copy, int size);

您的声明应如下所示。要声明一个函数,你只需要使用它的标题,而不是给它一个{}的正文,你只需用;结束该行,如下所示。

int num = stoi("32");

至于将字符串解析为整数,在C ++ 11中,您可以简单地如上所示。请点击此处查看更多信息:https://stackoverflow.com/a/11354496/2749485

请参阅下文,了解您的代码现在应该如何显示:

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

string solution(int cred, vector<int> original, vector<int> copy, int size);

int main(int argc, char** argv) {
    ifstream infile("TEST.txt", std::ifstream::in);
    string line;
    vector<string> inputLines;

    if(infile.is_open()){
        while(getline(infile, line)){
            cout << line << '\n';
            inputLines.push_back(line);
        }
    }

    infile.close();

    ofstream outfile("output.txt", std::ofstream::out);
    for(unsigned int i = 1; i < inputLines.size(); i+= 3){
        int credit = stoi(inputLines[i]);
        int numofItems = stoi(inputLines[i+1]);
        int numofItemscopy = stoi(inputLines[i+1]);

        vector<int> items;
        stringstream ssin(inputLines[i+2]);
        int x = 0;
        while(ssin.good() && x < numofItems){
            ssin >> items[x];
            ++x;
        }
        outfile << solution(credit,
                            numofItems,
                            numofItemscopy,
                            items.size());


        outfile << inputLines[i] << '\n';
    }
    outfile.close();
    return 0;
}


string solution(int cred, vector<int> original, vector<int> copy, int size){
    for(int i = 0; i < size; i++ ){
        for (int ii = 0; ii < size; ii++){
            if(original[i] + copy[ii] == cred){
                return std::string(i) + std::string(ii);
            }
        }
    }
    return "";
}

答案 1 :(得分:0)

如果要将它们放在同一个源文件中,函数定义应该放在main()之前