Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Visual C++/MFC/WTL > Не компилируется программа в Visual Studio


Автор: voland55 6.6.2009, 21:42
Учусь программировать по Джессу Либерти, дощел до очередного задания и вот
Код

#include <iostream>
using namespace std ;
int main()
//фунция DemonstrationFunction 
//выводит на экран информативное сообщение
void Demonstrationfunction()
{
cout <<"In DemonstrationFunction \n";
}
// функция main  выводит сообщение 
//затем вызывает функцию DemonstrationFunction
//и выводит на экран второе сообщение */
int main()
{
cout << " In main \n";
DemonstrationFunction();
cout <<"Back in main\n";
return 0 ;
}

вот что мне выдает Visual c++ express edition
http://imglink.ru/show-image.php?id=3086ca20fa2dbda1e16072b291150fdf  
писал тот же вопрос на forum.xakep.ru сказали мол отключи манифест. Я спрашиваю мол где отключить-пишут покопайтесь в настройках.Не подскажите где точно?

Автор: jonie 7.6.2009, 10:45
http://imglink.ru/show-image.php?id=dc2a8a6b87de8301bd50349b3124d18e
как я пологаю.

Автор: voland55 7.6.2009, 23:50
возможно и там.эмммм.не могли бы вы написать путь до этой опции.у меня руссифицированный VC++.
и кстати -чтоб не создавать новую тему 
Вот параллельно почитываю Фленова-с++ глазами хакера.там в первом задании сказано создайте проект MFC видимо версия программы была старой. В новых этот шаблон наверно переименован
вопрос в какой из этих - 
http://imglink.ru/show-image.php?id=aab9c48b90ea4e880fb9e396465461f5
спасибо.извините за нубские вопросы.я думаю все же когда то начинали))

Автор: nerezus 8.6.2009, 00:39
Цитата

Вот параллельно почитываю Фленова-с++ глазами хакера
 Не советую читать книги "аффтаров", которые не разбираются в том, про что пишут. Сожги эту дрянь.

Автор: SanyaDooM 8.6.2009, 01:59
В 3-й строке твоего кода, объявлен шаблон функции main() без точки с запятой, возможно сдесь ошибка, должно быть так:

int main();

Хотя обычно не нужно объявлять шаблон функции main(), поэтому 3-ю строку нужно удалить или закоментировать, попробуй и так.

В строке 6 функция у тебя объявлена  Demonstrationfunction(), а вызывается в строке 16 как DemonstrationFunction(). Разница в имени функции,

смотри внимательно, буква f и F, регистр в имени функции в с++ учитывается
Demonstration function
Demonstration Function

Вот твой код, только без ошибок:
Код


#include <iostream>
using namespace std ;
//int main();
//фунция DemonstrationFunction 
//выводит на экран информативное сообщение
void DemonstrationFunction()
{
cout <<"In DemonstrationFunction \n";
}
// функция main  выводит сообщение 
//затем вызывает функцию DemonstrationFunction
//и выводит на экран второе сообщение */
int main()
{
cout << " In main \n";
DemonstrationFunction();

cout <<"Back in main\n";
return 0 ;
}

Автор: voland55 8.6.2009, 09:03
так как мне создать проект MFC в vc++ если его там в списке нет или он был заменем или изменено название-есть только такие проекты 
http://imglink.ru/show-image.php?id=f8a34629dafbf055d578daa74d98ab2f

Автор: voland55 10.6.2009, 16:03
Код

#include <iostream>
using namespace std;
int main();
int Add (int 3, int 5);
{
cout << " In Add() ,received "<<x<<" and "<<y<<" \n";
return (x+y);
}

а это почему не компилится?

Автор: jonie 10.6.2009, 22:44
main объявлен, но не определен как минимум.

Автор: voland55 10.6.2009, 22:46
а как это сделать не подскажите?просто я тока тока начал...

Автор: voland55 11.6.2009, 12:42
Цитата

 Не советую читать книги "аффтаров", которые не разбираются в том, про что пишут. Сожги эту дрянь. 

а что посоветуешь по этой теме,просто не хотелось бы банальщину писать какую нибудь.

Автор: jonie 11.6.2009, 16:14
Цитата(voland55 @ 10.6.2009,  22:46)
а как это сделать не подскажите?просто я тока тока начал...

Код

#include <iostream>
using namespace std;
int main();
int Add (int x, int y);
{
cout << " In Add() ,received "<<x<<" and "<<y<<" \n";
return (x+y);
}

int main()
{
  Add(3,5);
  return 0;
}

Автор: voland55 11.6.2009, 21:48
странно не компилируется....ни в visual express edition ни полновесной visual 2008

Вот собственно что выдает http://imglink.ru



Error    1    error C2447: '{' : missing function header (old-style formal list?)    c:\documents and settings\мы\мои документы\visual studio 2008\projects\проба2\проба2\4.cpp
  

Автор: voland55 12.6.2009, 10:00
#include <iostream>
using namespace std;
int main();
int Add (int x, int y);
{
cout << " In Add() ,received "<<x<<" and "<<y<<" \n";
return (x+y);
}
int main()
{
Add(3,5);

system ("pause");
return 0;

}
вот в чем проблема

Автор: Irdis 12.6.2009, 14:55
и уберите два мэйна, зачем вам так много

Автор: SanyaDooM 12.6.2009, 19:19
Цитата(voland55 @ 11.6.2009,  21:48)
странно не компилируется....ни в visual express edition ни полновесной visual 2008

Вот собственно что выдает http://imglink.ru



Error    1    error C2447: '{' : missing function header (old-style formal list?)    c:\documents and settings\мы\мои документы\visual studio 2008\projects\проба2\проба2\4.cpp

Значит ты создал пустой проект, в пустом проекте exe нету, тебе надо создать его самому.

для этого:

1- запусти консоль визуала це плюс плюс

меню ПУСК->все программы -> Visual C++ 2008 Express Edition -> Visual Studio Tools -> Visual Studio 2008 Command Prompt


2- в командной сторке напиши так: cl "полный путь к файлу с точкой входа, тоесть к .cpp файлу с функцией main".
Например: если твой файл с функцией main() называется myProg.cpp, и находится на диске С: в папке MyProject, то в консоли пиши так:

cl   C:\MyProject\myProg.cpp

Жми  Enter на клаве и смотри что написала консоль, должно быть ноль ошибок ( 0 errors). 
Дальше в среде VC++ по нажатию F5 твоя программа уже будет запускаться, а это сообщение исчезнет.

и ещё по поводу приведённого кода, в нём ошибки. Ненужно объявлять прототип функции main,
зто надо было в очень старых компиляторах, удали эту сторчку. А в объявлении функции Add у тебя точка с запятой, если после объявления функции сразу идёт её код в скобках то точку с запятой ставить ненадо, вот твой код только правельный:

Код

#include <iostream>
using namespace std;


int Add (int x, int y)
{
cout << " In Add() ,received "<<x<<" and "<<y<<" \n";
return (x+y);
}

int main()
{
Add(3,5);

system ("pause");
return 0;

}



Удачи, спрашивай если чё недоговорил.

Автор: voland55 14.6.2009, 11:32
ну да.я так же и написал постом выше.я просто ставлю main чтоб мне не путаться пока.

да и кстати.а нельзя просто создать win32 console application со стандартными настройками-там разве не будет exe ?
большое спасибо за помощь ,жаль не могу + ставить

как оказалось если даже сделать так 
Цитата

да и кстати.а нельзя просто создать win32 console application со стандартными настройками-там разве не будет exe ?
большое спасибо за помощь ,жаль не могу + ставить

все равно на тоже самое нарываюсь.вот у меня вопросик,с коммандной строкой видители не работал запустил а там вот такая штучка http://imglink.ru/show-image.php?id=2c254d93cccbcc893337cf491a4a8fa1 .как там путь переписать?

и еще вопрос как создать проект чтоб он создавал экзе?или каждый раз вот так придется прописывать путь вручную?

Автор: SanyaDooM 14.6.2009, 14:51
Если создать проект win32 console application со стандартными настройками то .exe будет создан сам, но это сообщение (типа немогу найти .exe) может появлятся если в коде есть ошибки и компилятор спотыкается. После исправления ошибок все компилится и линкуется нормально, и .exe сам создаётся и запускается. Исключение состовляет пустой проект, там надо всё самому.

Кстати попробуй исправить ошибки и нажать F7- для компиляции, если ошибок нет то по нажатию F5 может сам создастся exe. Если нет то надо с консоли, очень важно чтоб небыло ошибок ато и консоль не поможет. Смотри лист ошибок View->Other windows->error List. 

Для навигации в консоли есть стандартные команды Dos


команда: cd [Имя папки]
cd DirName
Переход в папку с именем DirName

команда: cd..(две точки)
cd..
Переход на один уровень директории назад

команда cd\
cd\
переход в корень текущего диска

команда C:
переход на диск Це.  Аналогично D:   E:

команда dir 
dir
просмотр содержимого текущей папки

Но тебе надо запускать команду компиляции с директория который открывается по умолчанию при зарузке консоли, и писать полный путь к своему файлу Main.cpp, или как там он у тебя называется.

cl [полный путь к товоему заглавному файлу]
пример: 
cl  C:\MyProject\myMain.cpp


А вообще попробуй создать стандартный  win32 console application и нажми F5. должно откомпилится и создать exe, а потом с этим проектом можно эксперементировать, но не трогай сгенерированный код, например там теперь будет ни main(), а по новому стандарту _tmain(), просто подпиши инклюды и пиши код программы.


Автор: voland55 16.6.2009, 09:37
вот этот код верен?если да то 
Цитата

А вообще попробуй создать стандартный  win32 console application и нажми F5. должно откомпилится и создать exe, а потом с этим проектом можно эксперементировать, но не трогай сгенерированный код, например там теперь будет ни main(), а по новому стандарту _tmain(), просто подпиши инклюды и пиши код программы.
 не пойдет
Код

// with options.cpp : Defines the entry point for the console application.
//

#include <iostream>
using  namespace std;

int _tmain()
{
    cout << " The size of an int is :t\t\" <<sizeof(int) <<"bytes.\n"; 
    return 0;
}


Автор: SanyaDooM 16.6.2009, 18:59
Нет код с ошибками, во первых ты удалил сгенерированный   #include "stdafx.h", он нужен компилятору для ускорения компиляции, а в сторке 9 товего кода из за неправильного упровляющего символа /t (символ выравнивания) строка не закрывается, смотри на подсветку, строка не закрылась и задевает операторы.

попробуй так:

создай стандартный  win32 console application.

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

Код

//моя программа

#include "stdafx.h"
#include <conio.h>
#include <iostream>


using  namespace std;


int MoyaFynkcia()
{
  cout << "a eto vizvalas moya funkcia";
  return 0;
}


int _tmain()
{
    cout << " Dlinna v baytah tipa dannih INT= :   \t" << sizeof(int) << " baytov\n";

   //вызов моей функции
   MoyaFynkcia();

//пауза для консоли, нужно подключить #include <conio.h>
   _getch();

    return 0;
}


Далее нажми F7, а потом F5.

Скажи этот код запускается?

Автор: voland55 17.6.2009, 09:25
да.создал стандартный проект.впечатал Ваш код, запускается.
вообще свой код спечатал 1в1 с Джесса Либерти с++ за 21 день.вот кстати скрин фрагмента
http://imglink.ru/show-image.php?id=87fe30ef1db9cca2b623ed2e3e78d988
получается что по его книге уже нет смысла учится (придется тут каждый листинг обсуждать)?
и что посоветуете читать по чему можно научится на практике?


Автор: SanyaDooM 17.6.2009, 16:44
В принципе книга по которой ты учишься хорошая, но она плохо отсканирована, и можно путать символы (покрайне мере моя копия плохо отсканирована). Но ты сам невнимателен smile , в товоём скриншоте из книги в коде ошибок нет, просто ты переписал неправильно,  в книге символы \t\t а ты написал t\t\.

Ну ничего, всё приходит с практикой, я тоже самоучка,  и в визуале с++ стал программировать недавно.
Сам я учусь из всех источников подряд, это помогает взглянуть на всё с разных точек.

Ну удачи! smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)