PDA

Просмотр полной версии : [Помогите!] Ошибка вызова ф-и, компилятор ошибок не выдает!


Mr.Active
04.02.2013, 20:32
Уважаемые форумчане! Взываю к сильным к программирования на С++ .
Вообщем после прочтения 3 глав самоучителя по С++, решил написать консольную программу защищенную паролем и с несколькими вариантами выполнения программы. Так вот написал :) И появилась проблема ( компилятор не выдает сообщение о найденыйх ошибках ) и норм срабатывает линковшик.
НО при успешном выполнении условия в ф-и main луп срабатывает, что подтверждает вывод сообщеня о правильности ввода пароля, но не выполняется ф-я вложенная туда!

архив с этими функциями
([Ссылки могут видеть только зарегистрированные и активированные пользователи]) VT 0/46 ([Ссылки могут видеть только зарегистрированные и активированные пользователи] 62e5830f9ac466/analysis/1359998179/)
Мой быдлокод :
Main ()
#include <iostream>
using namespace std;

void Area ( );
void Perimetr ( );
void ChooseMenu ( );

int main ( )
{
cout << "ENTER PASSWORD" << endl;
int A = 555, P = 0;
cin >> P;
if ( P == A )
{
cout << " ACESS DENIED !!! " << endl;
void ChooseMenu ( );
}
else
{
cout << " ACESS NOT DENIED " << endl;
}
cin.get ();
cin.get ();
}

choose menu
#include <iostream>
using namespace std;

void ChooseMenu ( )
{
cout << " Enter number : One for find perimetr & Two for find Area" << endl;
int choose = 0;
cin >> choose;
if ( choose == 1)
{
void Perimetr ( );
}

if (choose == 2)
{
void Area ( );
}
}
perimetr
#include <iostream>
using namespace std;

void Perimetr ( )
{
double x, y;
cout << " Enter lidth & Width " << endl;
cin >> x >> y;
cout << " Perimetr = " << (x +y)*2;
}
Area
#include <iostream>
using namespace std;

void Area ( )
{
double x, y;
cout << " Enter lidth & Width " << endl;
cin >> x >> y;
cout << " Area = " << x * y;
}

pqsl
09.02.2013, 17:45
Что за бред я сейчас увидел ?

#include <iostream>
using namespace std;

void Area ( );
void Perimetr ( );
void ChooseMenu ( );

int main ( )
{
cout << "ENTER PASSWORD" << endl;
int A = 555, P = 0;
cin >> P;
if ( P == A )
{
cout << " ACESS DENIED !!! " << endl;
void ChooseMenu ( ); // Ошибка не нужно указывать void
}
else
{
cout << " ACESS NOT DENIED " << endl;
}
cin.get ();
cin.get ();

//Ошибка нет return

Теперь дальше. .cpp это другой модуль программы и обращаются к нему через .h
Создайте хедер с прототипами функций ну или сделайте их членами n-го класса, дальше определяйте класса в .cpp. А уже в main подключайте хедер объявляйте объект класса, и вызывайте функцию

Добавлено через 16 минут

/* sampleClass.h */



#ifndef SAMPLECLASS_H
#define SAMPLECLASS_H

class SampleClass {

public:
void ChooseMenu(void);
double Perimetr(double, double);
double Area(double,double);
};

#endif




/* sampleClass.cpp */



#include "sampleClass.h"
#include <iostream>

using namespace std;

void SampleClass::ChooiseMenu() {

double x, y;
cout << " Enter number : One for find perimetr & Two for find Area" << endl;
int choose = 0;
cin >> choose;
if (choose == 1)
{
cout << "Please enter numbers: ";
cin >> x >> y;

cout << Perimetr(x,y);
}

if (choose == 2)
{
cout << "Please enter numbers: ";
cin >> x >> y;
cout << Area(x,y);
}
}

double SampleClass::Perimetr(double a, double b) {

return (a + b) * 2;
}

double SampleClass::Area(double a, double b) {

return a * b;
}



/* main.cpp */



#include "sampleClass.h"
#include <iostream>

int main() {

SampleClass *sampleC = new SampleClass();

cout << "ENTER PASSWORD" << endl;
int A = 555, P = 0;
cin >> P;
if ( P == A )
{
cout << " ACESS DENIED !!! " << endl;
sampleC->ChooseMenu ( );
}
else
{
cout << " ACESS NOT DENIED " << endl;
}

delete sampleC;

return 0;
}



Как-то так, не проверял

Mr.Active
09.02.2013, 20:40
Спасибо товарищ , я только учусь . Когда я писал этот код я не знал о том, как работает : препроцессор , компилятор и линкер. Щас установил на VM ubuntu и gcc, а вчера только только разобрал подключение файлов в файл. я так понял мне надо прописывать " #include < header.h > ", чтобы препроцессор подключил эти файлы и компилятор сделал адекватный код для последующего вызова функий из этих файлов! Вы используете классы, а я до них еще не дочитал /dgs

pqsl
09.02.2013, 21:34
Спасибо товарищ , я только учусь . Когда я писал этот код я не знал о том, как работает : препроцессор , компилятор и линкер. Щас установил на VM ubuntu и gcc, а вчера только только разобрал подключение файлов в файл. я так понял мне надо прописывать " #include < header.h > ", чтобы препроцессор подключил эти файлы и компилятор сделал адекватный код для последующего вызова функий из этих файлов! Вы используете классы, а я до них еще не дочитал /dgs

Правильное решение поставить linux и gcc. Вот только gcc это компилятор для языка Си :) Вам нужен g++ а то будет *****код :) И не каких ide(Сред разработок) не используйте для вашего же блага :)