c++程序无法编译

标签 c++ compiler-construction

<分区>

#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 的新手,所以如果你能帮助我,我将不胜感激。谢谢!

最佳答案

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

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

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


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

关于c++程序无法编译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15642394/

相关文章:

compiler-construction - 衍生代码编译器

compiler-construction - 你最喜欢的抽象语法树优化

compiler-construction - Clojure 中的语法树生成

c++ - C++ 中更宽松的抛出说明符

c++ - 类错误不存在默认构造函数

c++ - Boost Graph 作为简单 DAG Graph 的基础?

c++ - 在 C++ 中使用库 "xtensor-blas"时出错

C++ boost log位置(索引)格式对齐

c++ - 如果输入是 EOF, "std::cin >> value"是否返回零?

scala - 方差注释,通过Scala编译器跟踪 "positive"和 "negative"位置