0
#include <fstream>
#include <vector>
#define maxn 200000
#include <algorithm>

using namespace std;

class automat {
    vector<pair<int, char> > Q[maxn];
    int *validare;
    int *p;
    int init, st_fin, n, m, i, a, b;
    char c;
    public: automat(char*);
    // void operator +=(automat);
};

automat::automat(char *s) {
    ifstream f(s);
    f >> n >> m >> init >> st_fin;
    validare = new int[n];
    p = new int[n];
    for (i = 1; i <= st_fin; i++) {
        f >> p[i];
    }
    for (i = 0; i < m; i++) {
        f >> a >> b >> c;
        Q[a].push_back(make_pair(b, c));
    }
}

int main() {
    automat M("input.txt");
    return 0;
}

它不会编译。你能帮我告诉我为什么吗?它给了我 cc1plus.exe 停止工作的消息,我真的不知道为什么。我是 OOP 的新手,所以如果你能帮助我,我将不胜感激。谢谢!

4

3 回答 3

3

automat M;尝试调用不带参数的构造函数(默认构造函数)。如果您没有定义自己的构造函数,编译器只会为您隐式生成默认构造函数。但是,您已经定义了一个automat带有char*参数的构造函数。你需要通过一个char*. 例如,您可能想要执行以下操作:

char filename[] = "file.txt";
automat M(filename);

这依赖于数组到指针的转换,将filename数组转换为指向其第一个元素的指针。


由于 MinGW 的一个已知问题,编译器正在崩溃。原因是您试图std::vector在堆栈上分配 200000 秒。大多数环境的堆栈限制约为 1MB。您很容易发生堆栈溢出。

于 2013-03-26T16:34:18.117 回答
2

automat没有默认构造函数,所以你不能这样做:

automat M;

一旦你声明了一个构造函数,编译器就不再为你生成一个默认构造函数。你已经声明了这个:

automat(char*);

所以编译器不再综合automat();你需要决定是否需要默认构造,在这种情况下你需要添加一个默认构造函数。如果没有,则automat使用char*.

于 2013-03-26T16:34:24.433 回答
1

Program specified above compiles successfully but it crashes at runtime and the crash is not due to default constructor not provided!

The crash when compiler tries to create

vector<pair<int, char> > Q[maxn];

And the reason is this huge maxn

Currently it is defined as

#define maxn 200000

And crash occurs while creating this huge vector on stack, change it to some smaller value i.e. 200 and you should not see any crash! Or otherwise you need to change stack size!

I was able to reproduce it on Visual Studio 10, in VS we can change stack size as specified in http://msdn.microsoft.com/en-us/library/tdkhxaks(v=vs.71).aspx similarly we can also change for GCC http://www.cs.nyu.edu/exact/core/doc/stackOverflow.txt

于 2013-03-26T17:48:23.500 回答