(c++)试图记住在哪里定义函数

(C++) Trying to remember where to define functions

本文关键字:在哪里 定义 函数 c++      更新时间:2023-10-16

自从我触摸c++以来已经有一段时间了,但是我在main里面写了一个叫做"solution"的函数,现在那行给了我错误:"在'{'之前不允许有函数定义"

之后,我认为我应该在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];

我得到错误:"cannot convert ' std::basic_string ' to ' int ' initialization"

当我调用我的"solution"函数时:

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

我得到"解决方案未在此范围内声明"的错误。

首先,在主函数中使用函数之前,需要对函数进行声明。如果愿意,可以在main函数之后定义。编译器从上到下,它只知道它在这一点上看到了什么。当你在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 "";
}

函数定义应该放在main()之前,如果你想让它们位于同一个源文件