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

标签 c++

自从我接触 C++ 以来已经有一段时间了,但我在我的 main 中写了一个名为“解决方案”的函数,现在该行给我错误:“函数定义在 '{' 之前是不允许的"

后来我想我应该在我的 main() 之后写我的函数定义,但这导致了另一连串的错误。

此外,就我的代码而言,当我调用我的函数解决方案并将其传递到我的输出文件时,我收到“无效参数”错误。

我还在输入末尾的“预期的‘{’”的最后一个‘{’上得到了错误。

#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());

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

最佳答案

首先,您需要先声明您的函数,然后再在主函数中使用它。如果您愿意,您可以在主函数之后定义它。编译器从上到下,它只知道到那时它看到了什么。当你在 main 中调用它时,编译器还没有看到 solution 函数,所以它不知道该做什么。

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

您的声明应如下所示。要声明一个函数,您只需使用它的 header 而不是使用 {} 为其提供函数体,您只需使用 ; 结束该行,如下所示。

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 "";
}

关于c++ - (C++) 试图记住在哪里定义函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22341684/

相关文章:

c++ - 更改可变参数模板中的最后一个类型

c++ - QT/c++调用父方法的最佳方式

c++ - 在 Windows 2008 R2 SP1 上使用 GetVersionEx 时出现错误行为

c++ - 为什么 if ... else if ... else 有共同的作用域? last else 的共同作用域是什么?

c++ - 将 C++ 库转换为 Objective-C

c++将单个变量作为引用和常量引用传递

c++ - 不能明确特化

c++ - 使用数组参数的函数特化

c++ - 算法分析大O和正常符号

c++ - 在 .h 文件中包含仅用于私有(private)数据的 header