2013-03-26 4 views
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 перестает работать, и я действительно не знаю почему. Я отчасти новичок в ООП, поэтому, если вы можете мне помочь, я бы очень признателен. Благодаря!C++ программа не компилируется

+4

Когда вы задаете такие вопросы, пожалуйста, пожалуйста, укажите фактические ошибки , Это помогает людям ответить вам и делает ваш вопрос (и любые ответы) приемлемым. –

+1

Какой тип компилятора вы используете? Является ли 'cc1plus.exe' именем вашего исполняемого файла? – plast1K

+1

@Jacob: ошибка в том, что компилятор сработает. –

ответ

3

automat M; пытается вызвать конструктор без аргументов (конструктор по умолчанию). Компилятор будет неявно генерировать конструктор по умолчанию для вас, если вы не определили свои собственные конструкторы. Однако вы определили один конструктор для automat, который принимает аргумент char*. Вам необходимо пройти char*. Например, вы можете сделать следующее:

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

Это зависит от преобразования массива в-указатель, чтобы превратить filename массив в указатель на его первый элемент.


Компилятор сбой из-за известной проблемы с MinGW. Причина в том, что вы пытаетесь выделить 200000 std::vector s в стеке. В большинстве сред ограничение стека составляет около 1 МБ. У вас легко будет переполнение стека.

+0

ОК, я сделал то, что вы сказали, но ничего не меняет. Это все равно дает мне ту же ошибку, о которой я говорил в первую очередь. Не компилируется и не дает сообщение о том, что cc1plus.exe перестает работать. –

+1

@AndreiStirb Можете ли вы скомпилировать _anything_? Например, 'int main() {return 0; } '? Просто чтобы убедиться, что компилятор не полностью сломан. –

+0

Да, я пытался скомпилировать другие программы, и он работает –

2

automat не не имеет конструктор по умолчанию, так что вы не можете сделать это:

automat M; 

После того, как вы объявляете конструктор, компилятор больше не генерирует по умолчанию один для вас. Вы объявили этот:

automat(char*); 

поэтому компилятор уже не синтезирует automat(); Вы должны решить, нужно ли строительство по умолчанию, в этом случае вам нужно добавить конструктор по умолчанию. Если нет, то создайте экземпляр automat с помощью char*.

+0

Это не решит проблему, попробуйте запустить программу, которая будет сбой, во время выполнения. – Saqlain

+0

@Saqlain Решает проблему, которую не компилирует, о чем вы спрашиваете. – juanchopanza

+0

для меня в визуальной студии он компилируется отлично, как есть, но когда я пытаюсь запустить его, он падает, и я ответил на общий вопрос выше в ответе ... – Saqlain

1

Программа, указанная выше, успешно компилируется, но она врезается во время выполнения, и авария не вызвана конструкцией по умолчанию, не предоставленной!

Катастрофа, когда компилятор пытается создать

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

И причина эта огромная maxn

В настоящее время она определяется как

#define maxn 200000 

И происходит сбой при создании этого огромного вектора на стек, измените его на меньшее значение, т.е. 200, и вы не увидите никакого сбоя! Или иначе вам нужно изменить размер стека!

Я был в состоянии воспроизвести его на Visual Studio 10, в VS мы можем изменить размер стека, как указано в http://msdn.microsoft.com/en-us/library/tdkhxaks(v=vs.71).aspx так же мы можем изменить для GCC http://www.cs.nyu.edu/exact/core/doc/stackOverflow.txt

Смежные вопросы