Re[12]: Как запустить консольное приложение в VS 2008 ???
От: rg45 СССР  
Дата: 26.11.09 17:57
Оценка: 3 (1)
Здравствуйте, Cynic, Вы писали:

C>Кажется я сам понял в чём дело. Поправьте меня если я ошибаюсь, уже 5ть лет C++ не трогал! Было так:

C>
C>int main(int argsCount, char* args[])
C>{
C>    cout << "argsCount : " + argsCount << endl;
C>}
C>

C>Как я понял из-за того, что тип строки char*, argsCount — int, происходит применение операции '+' к char* со сдвигом указателя char* на 1 байт, и он начинает указывать на второй символ строки

Все верно. Чтобы исправить ошибку, написать нужно так:
cout << "argsCount : " << argsCount << endl;
--
Re[5]: Как запустить консольное приложение в VS 2008 ???
От: rg45 СССР  
Дата: 26.11.09 16:45
Оценка: 1 (1)
Здравствуйте, Cynic, Вы писали:

C>Здравствуйте, rg45, Вы писали:


C>Осталось чуть-чуть

C>1) При попытке запустить программу, вылезает окно с сообщением: "This project is out of date: MyFirstProject — Debug Win32";
C>Если всё равно продолжить, то:
C>2) Если return 0 не писать вылетает "error C4716: 'MyFirstProgramm::main' : must return a value";
C>3) Если return 0 написать, то ещё лучше, сразу две ошибки "error LNK2019: unresolved external symbol _main referenced in function ___tmainCRTStartup — MSVCRTD.lib" и "fatal error LNK1120: 1 unresolved externals";
C>4) Я заметил, что есть разница между #include <iostream.h> и #include <iostream>;
C>5) Где обычно находятся header files и где в свойствах проекта это указать;

Судя по всему, ты определил функцию main в неймспейсе MyFirstProgramm. Сама по себе идея использовать пространства имен хороша, но функция main — особый случай — она должна находиться только в глобальном пространстве имен.
--
Re[5]: Как запустить консольное приложение в VS 2008 ???
От: rg45 СССР  
Дата: 26.11.09 16:57
Оценка: 1 (1)
Здравствуйте, Cynic, Вы писали:

По остальным вопросам:

C>4) Я заметил, что есть разница между #include <iostream.h> и #include <iostream>;


Лучше сразу вырабатывать привычку писать портабельный код. Согласно стандарту заголовок называется именно <iostream>, а не <iostream.h>

C>5) Где обычно находятся header files и где в свойствах проекта это указать;


В принципе, заголовочные файлы не являются компилируемыми единицами и могут располагаться где угодно, нужно только уметь обеспечить, чтобы студия их находила. Но это отдельный вопрос. Для начала помести свои заголовочные файлы в один каталог с cpp-файлами и для комфортной работы подключи их проекту. Подключение заголовков проекту ни на что не влияет, кроме удобства работы. Включай эти заголовки в исходные файлы с использованием кавычек, но не угловых скобок, например:
#include "my_header.h"


Еще один момент. Имеет смысл активно использовать различные расширения для заголовочных файлов — .h и .hpp. При таком подходе сразу понятно, какие заголовки можно подключать только к C++ исходникам, а какие и к C++ и к C.
--
Re[7]: Как запустить консольное приложение в VS 2008 ???
От: rg45 СССР  
Дата: 26.11.09 17:14
Оценка: 1 (1)
Здравствуйте, Cynic, Вы писали:

C>Ещё задалбало сообщение "This project is out of date: MyFirstProject — Debug Win32" в VS Как от него избавится ???


Ну нормальное сообщение Это предупреждение появляется при подаче команды на пуск программы, но при этом с момента последней компиляции сделаны какие-то изменения. Если после каких-либо изменений, прежде, чем давать команду на запуск, ты будешь предварительно ее компилировать, то это сообщение не будет появляться.
--
Re[13]: Как запустить консольное приложение в VS 2008 ???
От: Cynic Россия  
Дата: 26.11.09 18:00
Оценка: :)
Здравствуйте, rg45, Вы писали:

R>Здравствуйте, Cynic, Вы писали:


C>>Кажется я сам понял в чём дело. Поправьте меня если я ошибаюсь, уже 5ть лет C++ не трогал! Было так:

C>>
C>>int main(int argsCount, char* args[])
C>>{
C>>    cout << "argsCount : " + argsCount << endl;
C>>}
C>>

C>>Как я понял из-за того, что тип строки char*, argsCount — int, происходит применение операции '+' к char* со сдвигом указателя char* на 1 байт, и он начинает указывать на второй символ строки

R>Все верно. Чтобы исправить ошибку, написать нужно так:

R>
R>cout << "argsCount : " << argsCount << endl;
R>


В общем вот вам подарок. Спасибо за помощь
:)
Как запустить консольное приложение в VS 2008 ???
От: Cynic Россия  
Дата: 26.11.09 15:07
Оценка:
Привет народ. Давно, что-то не трогал C++. Вопрос такой как в VS2008 запустить консольное приложение. Что нибудь типа этого:
    int main()
    {
        cout << "HelloWorld !!!" << endl;
        return 0;
    }
:)
Re: Как запустить консольное приложение в VS 2008 ???
От: rg45 СССР  
Дата: 26.11.09 15:55
Оценка:
Здравствуйте, Cynic, Вы писали:

C>Привет народ. Давно, что-то не трогал C++. Вопрос такой как в VS2008 запустить консольное приложение. Что нибудь типа этого:

C>
C>    int main()
C>    {
C>        cout << "HelloWorld !!!" << endl;
C>        return 0;
C>    }
C>


Открываешь студию, потом заходишь через главное меню: File/New/Project... В появившемся диалоговом окне выбираешь тип проекта: Visual C++/Win32/Win32 Console Application. Здесь же указываешь имя проекта и путь на файловой системе. Дальше мастер создает тебе заготовку проекта. После этого заходишь в файл StdAfx.h и выкидываешь оттуда все, что нагенерил мастер. Вместо этого пишешь:
#pragma once
#include <iostream>
//и другие заголовки добавляешь сюда по мере надобности.

Затем заходишь в главный файл проекта, опять же выкидываешь все, что нагенерил мастер и пишешь вместо этого:
#include "StdAfx.h"

int main()
{
  std::cout << "Hello, World !!!" << std::endl;
  //return 0 согласно стандарту в этом месте писать не обязательно.
}

И все. Компиляция и запуск.
--
Re[2]: Как запустить консольное приложение в VS 2008 ???
От: Cynic Россия  
Дата: 26.11.09 15:57
Оценка:
Здравствуйте, rg45, Вы писали:

R>Открываешь студию, потом заходишь через главное меню: File/New/Project... В появившемся диалоговом окне выбираешь тип проекта: Visual C++/Win32/Win32 Console Application. Здесь же указываешь имя проекта и путь на файловой системе. Дальше мастер создает тебе заготовку проекта. После этого заходишь в файл StdAfx.h и выкидываешь оттуда все, что нагенерил мастер. Вместо этого пишешь:

R>
R>#pragma once
R>#include <iostream>
R>//и другие заголовки добавляешь сюда по мере надобности.
R>

R>Затем заходишь в главный файл проекта, опять же выкидываешь все, что нагенерил мастер и пишешь вместо этого:
R>
R>#include "StdAfx.h"

R>int main()
R>{
R>  std::cout << "Hello, World !!!" << std::endl;
R>  //return 0 согласно стандарту в этом месте писать не обязательно.
R>}
R>

R>И все. Компиляция и запуск.

А если создал EmptyProject ?
:)
Re[3]: Как запустить консольное приложение в VS 2008 ???
От: rg45 СССР  
Дата: 26.11.09 16:17
Оценка:
Здравствуйте, Cynic, Вы писали:

C>А если создал EmptyProject ?


Тоже можно, но немного больше действий прийдется сделать. Нужно открыть диалоговое окно свойств проекта () и сделать следующие настройки:
  1. General: Configuration Type = Application (.exe)
  2. Linker/System: Subsystem = Console
  3. C/C++/Precompiled Headers: Create/Use Precompiled Header = Not using precompiled headers
После чего добавляешь к проекту новый файл, обзываешь его, например, main.cpp:
#include <iostream>

int main()
{
  std::cout << "Hello, World !!!" << std::endl;
  //return 0 согласно стандарту в этом месте писать не обязательно.
}

Все. Компиляция, запуск.

Рекомендации по созданию проекта в обоих случаях я давал исключительно исходя из принципа минимума действий. Поэтому в первом и во втором случаях проекты получились несколько разных конфигураций: в первом случае использовались предкомпилируемые заголовки, а во втором нет. В этих тонкостях уже тебе прийдется разбираться.
--
Re[4]: Как запустить консольное приложение в VS 2008 ???
От: Cynic Россия  
Дата: 26.11.09 16:42
Оценка:
Здравствуйте, rg45, Вы писали:

R>Здравствуйте, Cynic, Вы писали:


C>>А если создал EmptyProject ?


R>Тоже можно, но немного больше действий прийдется сделать. Нужно открыть диалоговое окно свойств проекта () и сделать следующие настройки:

R>

    R>
  1. General: Configuration Type = Application (.exe)
    R>
  2. Linker/System: Subsystem = Console
    R>
  3. C/C++/Precompiled Headers: Create/Use Precompiled Header = Not using precompiled headers
    R>
R>После чего добавляешь к проекту новый файл, обзываешь его, например, main.cpp:
R>Все. Компиляция, запуск.

Осталось чуть-чуть
1) При попытке запустить программу, вылезает окно с сообщением: "This project is out of date: MyFirstProject — Debug Win32";
Если всё равно продолжить, то:
2) Если return 0 не писать вылетает "error C4716: 'MyFirstProgramm::main' : must return a value";
3) Если return 0 написать, то ещё лучше, сразу две ошибки "error LNK2019: unresolved external symbol _main referenced in function ___tmainCRTStartup — MSVCRTD.lib" и "fatal error LNK1120: 1 unresolved externals";
4) Я заметил, что есть разница между #include <iostream.h> и #include <iostream>;
5) Где обычно находятся header files и где в свойствах проекта это указать;

Первый раз самый трудный
:)
Re[5]: Как запустить консольное приложение в VS 2008 ???
От: Cynic Россия  
Дата: 26.11.09 16:46
Оценка:
Здравствуйте, Cynic, Вы писали:

C>Осталось чуть-чуть

C>1) При попытке запустить программу, вылезает окно с сообщением: "This project is out of date: MyFirstProject — Debug Win32";
C>Если всё равно продолжить, то:
C>2) Если return 0 не писать вылетает "error C4716: 'MyFirstProgramm::main' : must return a value";
C>3) Если return 0 написать, то ещё лучше, сразу две ошибки "error LNK2019: unresolved external symbol _main referenced in function ___tmainCRTStartup — MSVCRTD.lib" и "fatal error LNK1120: 1 unresolved externals";
C>4) Я заметил, что есть разница между #include <iostream.h> и #include <iostream>;
C>5) Где обычно находятся header files и где в свойствах проекта это указать;

C>Первый раз самый трудный


Сорри. Часть вопросов отвалилась. Я main в namespace засунул.

1) При попытке запустить программу, вылезает окно с сообщением: "This project is out of date: MyFirstProject — Debug Win32";
Если всё равно продолжить, то:
2) Я заметил, что есть разница между #include <iostream.h> и #include <iostream>;
3) Где обычно находятся header files и где в свойствах проекта это указать;
4) Почему если засунуть main в namespace вылетает ошибка;
:)
Re[6]: Как запустить консольное приложение в VS 2008 ???
От: Cynic Россия  
Дата: 26.11.09 17:05
Оценка:
Ещё задалбало сообщение "This project is out of date: MyFirstProject — Debug Win32" в VS Как от него избавится ???
:)
Re[8]: Как запустить консольное приложение в VS 2008 ???
От: rg45 СССР  
Дата: 26.11.09 17:16
Оценка:
Здравствуйте, rg45, Вы писали:

R>Здравствуйте, Cynic, Вы писали:


C>>Ещё задалбало сообщение "This project is out of date: MyFirstProject — Debug Win32" в VS Как от него избавится ???


R>Ну нормальное сообщение Это предупреждение появляется при подаче команды на пуск программы, но при этом с момента последней компиляции сделаны какие-то изменения. Если после каких-либо изменений, прежде, чем давать команду на запуск, ты будешь предварительно ее компилировать, то это сообщение не будет появляться.


А еще обрати внимание^ в диалоговом окне, содержащем это предупреждение есть флажок: "Do not show this dialog again"
--
Re[9]: Как запустить консольное приложение в VS 2008 ???
От: Cynic Россия  
Дата: 26.11.09 17:20
Оценка:
Здравствуйте, rg45, Вы писали:

R>А еще обрати внимание^ в диалоговом окне, содержащем это предупреждение есть флажок: "Do not show this dialog again"


Да я уже так сделал, просто интересно было, что оно от меня хотело. Тут ещё парочка вопросов прилипла.
1) Как избавиться от необходимости писать std:: ? В C# для этих целей был using!
2) Почему cout << "text" << endl; съедает первый символ при выводе. Что-то там было про cout, но найти не могу
:)
Re[10]: Как запустить консольное приложение в VS 2008 ???
От: rg45 СССР  
Дата: 26.11.09 17:29
Оценка:
Здравствуйте, Cynic, Вы писали:

C>1) Как избавиться от необходимости писать std:: ? В C# для этих целей был using!


В С++ тоже есть:
using namespace std; //using - директива
using std::string; //using - объявление


Только в отличие от C# использовать эти директивы можно не только на уровне пространств имен, но и внутри функций. И пользоваться этими средствами надо очень аккуратно. Вынесение директивы using в общий заголовок может привести к большим неприятностям. Но эти вопросы уже в двух словах не охватить. Лучше почитать хорошую книжку.

C>2) Почему cout << "text" << endl; съедает первый символ при выводе. Что-то там было про cout, но найти не могу


Вот это совершенно нетипичное поведение, даже не могу предположить, что это такое :zx:
--
Re[10]: Как запустить консольное приложение в VS 2008 ???
От: rg45 СССР  
Дата: 26.11.09 17:37
Оценка:
Здравствуйте, Cynic, Вы писали:

C>2) Почему cout << "text" << endl; съедает первый символ при выводе. Что-то там было про cout, но найти не могу


Проверь на всякий случай, нет ли у тебя в текстовом литерале символа обратной косой ('\') перед символом 't'. Комбинация "\t" трактуется как escape-последовательность и заменяется на табуляцию. Поэтому если написать так: "\text", то как раз первый символ и будет "съеден".
--
Re[11]: Как запустить консольное приложение в VS 2008 ???
От: Cynic Россия  
Дата: 26.11.09 17:50
Оценка:
Здравствуйте, rg45, Вы писали:

C>>2) Почему cout << "text" << endl; съедает первый символ при выводе. Что-то там было про cout, но найти не могу

R>Вот это совершенно нетипичное поведение, даже не могу предположить, что это такое :zx:

Кажется я сам понял в чём дело. Поправьте меня если я ошибаюсь, уже 5ть лет C++ не трогал! Было так:
int main(int argsCount, char* args[])
{
    cout << "argsCount : " + argsCount << endl;
}

Как я понял из-за того, что тип строки char*, argsCount — int, происходит применение операции '+' к char* со сдвигом указателя char* на 1 байт, и он начинает указывать на второй символ строки
:)
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.