Program on c++ crash. Why?

-4

This code does not work. Please explain this. Just started to learn the language
Throws this message: "NMAKE : fatal error U1077: "C:\Program Files\JetBrains\CLion 2019.2.2\bin\cmake\win\bin\cmake.exe" : returned code "0xffffffff" Stop."

#include<iostream>
#include<vector>

using namespace std;
using std::vector;
using std::cout;
using std::endl;
using std::allocator;

class FindAmountOutRange {
    int main() {
        findAmountOutRange(10, 2, 5);
        return 0;
    }

    static void findAmountOutRange(int amountNumbers, int firstIndexOfRange, int lastIndexOfRange) {
        int sum = 0;
        vector<int> numbers(amountNumbers);

        for (int number : numbers) {
            if (number < numbers.size()) {
                numbers.push_back(rand() % 100);
            }
        }

        for (int number : numbers) {
            cout << number << endl;
        }
        auto begin = numbers.cbegin();
        auto end = numbers.cend();
        numbers.erase(begin + firstIndexOfRange, end - lastIndexOfRange);
        for (int number : numbers) {
            cout << number << endl;
        }

        for (int number : numbers) {
            sum += numbers.at(number);
        }
        cout << sum << endl;
    }
};
c++
asked on Stack Overflow Sep 19, 2019 by Aniosky • edited Sep 19, 2019 by HolyBlackCat

1 Answer

2

Your program is missing its entry point. The main function has to be present outside of a class like in C:

#include<iostream>
#include<vector>

using namespace std;
using std::vector;
using std::cout;
using std::endl;
using std::allocator;

class FindAmountOutRange {
public:
    static void findAmountOutRange(int amountNumbers, int firstIndexOfRange, int lastIndexOfRange) {
        int sum = 0;
        vector<int> numbers(amountNumbers);

        for (int number : numbers) {
            if (number < numbers.size()) {
                numbers.push_back(rand() % 100);
            }
        }

        for (int number : numbers) {
            cout << number << endl;
        }
        auto begin = numbers.cbegin();
        auto end = numbers.cend();
        numbers.erase(begin + firstIndexOfRange, end - lastIndexOfRange);
        for (int number : numbers) {
            cout << number << endl;
        }

        for (int number : numbers) {
            sum += numbers.at(number);
        }
        cout << sum << endl;
    }
};

int main() {
    FindAmountOutRange::findAmountOutRange(10, 2, 5);
    return 0;
}

Please also note the public: keyword in a class which makes your function findAmountOutRange accessible from the outside (although you can argue about it residing in a class anyways as its just a static method).

In C++ you do not have to use classes. You can also just define functions like in C, so in your case, the function findAmountOutRange is unneccessarly put inside a class.

answered on Stack Overflow Sep 19, 2019 by Nidhoegger

User contributions licensed under CC BY-SA 3.0