Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

подскажите по VS

69K
10 июля 2011 года
noob c++
21 / / 10.07.2011
Здравствуйте.
Недавно начал изучать C++
В книге написано что обязательный заголовочный файл iostream.h
Приводится такой пример:
 
Код:
#include <iostream.h>

    void main(void)

    {
       cout << "Учимся программировать на языке C++!";
    }

Решил вставить в Visual C++ 2010 этот код. Создал проект win32, открылось поле для ввода кода, а там уже столько всего:
Код:
// VIVOD.cpp: определяет точку входа для приложения.
//

#include "stdafx.h"
#include "VIVOD.h"

#define MAX_LOADSTRING 100

// Глобальные переменные:
HINSTANCE hInst;                                // текущий экземпляр
TCHAR szTitle[MAX_LOADSTRING];                  // Текст строки заголовка
TCHAR szWindowClass[MAX_LOADSTRING];            // имя класса главного окна

// Отправить объявления функций, включенных в этот модуль кода:
ATOM                MyRegisterClass(HINSTANCE hInstance);
BOOL                InitInstance(HINSTANCE, int);
LRESULT CALLBACK    WndProc(HWND, UINT, WPARAM, LPARAM);
INT_PTR CALLBACK    About(HWND, UINT, WPARAM, LPARAM);

int APIENTRY _tWinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPTSTR    lpCmdLine,
                     int       nCmdShow)
{
    UNREFERENCED_PARAMETER(hPrevInstance);
    UNREFERENCED_PARAMETER(lpCmdLine);

    // TODO: разместите код здесь.
    MSG msg;
    HACCEL hAccelTable;

    // Инициализация глобальных строк
    LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);
    LoadString(hInstance, IDC_VIVOD, szWindowClass, MAX_LOADSTRING);
    MyRegisterClass(hInstance);

    // Выполнить инициализацию приложения:
    if (!InitInstance (hInstance, nCmdShow))
    {
        return FALSE;
    }

    hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_VIVOD));

    // Цикл основного сообщения:
    while (GetMessage(&msg, NULL, 0, 0))
    {
        if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
        {
            TranslateMessage(&msg);
            DispatchMessage(&msg);
        }
    }

    return (int) msg.wParam;
}



//
//  ФУНКЦИЯ: MyRegisterClass()
//
//  НАЗНАЧЕНИЕ: регистрирует класс окна.
//
//  КОММЕНТАРИИ:
//
//    Эта функция и ее использование необходимы только в случае, если нужно, чтобы данный код
//    был совместим с системами Win32, не имеющими функции RegisterClassEx'
//    которая была добавлена в Windows 95. Вызов этой функции важен для того,
//    чтобы приложение получило "качественные" мелкие значки и установило связь
//    с ними.
//
ATOM MyRegisterClass(HINSTANCE hInstance)
{
    WNDCLASSEX wcex;

    wcex.cbSize = sizeof(WNDCLASSEX);

    wcex.style          = CS_HREDRAW | CS_VREDRAW;
    wcex.lpfnWndProc    = WndProc;
    wcex.cbClsExtra     = 0;
    wcex.cbWndExtra     = 0;
    wcex.hInstance      = hInstance;
    wcex.hIcon          = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_VIVOD));
    wcex.hCursor        = LoadCursor(NULL, IDC_ARROW);
    wcex.hbrBackground  = (HBRUSH)(COLOR_WINDOW+1);
    wcex.lpszMenuName   = MAKEINTRESOURCE(IDC_VIVOD);
    wcex.lpszClassName  = szWindowClass;
    wcex.hIconSm        = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_SMALL));

    return RegisterClassEx(&wcex);
}

//
//   ФУНКЦИЯ: InitInstance(HINSTANCE, int)
//
//   НАЗНАЧЕНИЕ: сохраняет обработку экземпляра и создает главное окно.
//
//   КОММЕНТАРИИ:
//
//        В данной функции дескриптор экземпляра сохраняется в глобальной переменной, а также
//        создается и выводится на экран главное окно программы.
//
BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
{
   HWND hWnd;

   hInst = hInstance; // Сохранить дескриптор экземпляра в глобальной переменной

   hWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,
      CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL);

   if (!hWnd)
   {
      return FALSE;
   }

   ShowWindow(hWnd, nCmdShow);
   UpdateWindow(hWnd);

   return TRUE;
}

//
//  ФУНКЦИЯ: WndProc(HWND, UINT, WPARAM, LPARAM)
//
//  НАЗНАЧЕНИЕ:  обрабатывает сообщения в главном окне.
//
//  WM_COMMAND  - обработка меню приложения
//  WM_PAINT    -Закрасить главное окно
//  WM_DESTROY   - ввести сообщение о выходе и вернуться.
//
//
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    int wmId, wmEvent;
    PAINTSTRUCT ps;
    HDC hdc;

    switch (message)
    {
    case WM_COMMAND:
        wmId    = LOWORD(wParam);
        wmEvent = HIWORD(wParam);
        // Разобрать выбор в меню:
        switch (wmId)
        {
        case IDM_about :
            DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About);
            break;
        case IDM_EXIT:
            DestroyWindow(hWnd);
            break;
        default:
            return DefWindowProc(hWnd, message, wParam, lParam);
        }
        break;
    case WM_PAINT:
        hdc = BeginPaint(hWnd, &ps);
        // TODO: добавьте любой код отрисовки...
        EndPaint(hWnd, &ps);
        break;
    case WM_DESTROY:
        PostQuitMessage(0);
        break;
    default:
        return DefWindowProc(hWnd, message, wParam, lParam);
    }
    return 0;
}

// Обработчик сообщений для окна "О программе".
INT_PTR CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
    UNREFERENCED_PARAMETER(lParam);
    switch (message)
    {
    case WM_INITDIALOG:
        return (INT_PTR)TRUE;

    case WM_COMMAND:
        if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL)
        {
            EndDialog(hDlg, LOWORD(wParam));
            return (INT_PTR)TRUE;
        }
        break;
    }
    return (INT_PTR)FALSE;
}


Зачем это все там присутствует ? Можно ли это удалять ?
Почему проект не собирается с таким кодом в нем:
 
Код:
#include <iostream.h>

    void main(void)

    {
       cout << "Учимся программировать на языке C++!";
    }


Если можно - по подробнее пожалуйста
Страницы:
278
10 июля 2011 года
Alexander92
1.1K / / 04.08.2008
Вам нужно создать не проект Win32, а проект консольного приложения. Это во-первых. Во-вторых, если вы внимательно посмотрите на диалог создания приложения, вы увидите, что можно создавать пустой проект, а можно создать проект по различным шаблонам. Если вы хотите писать полностью свой код, то вам нужно создать пустой проект и добавить в него cpp-файл с вашим содержимым. Наконец, почему не собирается ваш код - скорее всего, из-за кодировки. По умолчанию, проект собирается в юникоде. Либо поставьте многобайтовую кодировку, либо приведите строки в правильное представление:
 
Код:
cout << L"Учимся программировать на языке C++!";
69K
10 июля 2011 года
noob c++
21 / / 10.07.2011
спасибо
69K
10 июля 2011 года
noob c++
21 / / 10.07.2011
Почему VS ругается на:
// VIVOD.cpp: определяет точку входа для консольного приложения.
//

#include "stdafx.h"
#include "iostream.h"


void main(void)

{
cout << "Учимся программировать на языке C++!";
}
278
10 июля 2011 года
Alexander92
1.1K / / 04.08.2008
noob c++, вы пришли на форум программистов или форум телепатов? Слово "ругается" означает совершенно конкретный код ошибки и ее описание.

Почитайте про директиву #include, и ваш первый вопрос отпадет.
 
Код:
#include "stdafx.h"
#include <iostream>

void main(void) {
  std::cout << "Учимся программировать на языке C++!";
}
69K
10 июля 2011 года
noob c++
21 / / 10.07.2011
Про оператор #include знаю что он подгружает в программу заголовочные файлы, в которых содержится определения для компилятора. Для различных операция свои заголовочные файлы.
Вся проблема в том, что в книге говорится: заголовочный файл iostream будет использоваться в каждой программе, но о stdafx.h ничего не сказано. А без него программа не собирается! Плюс к тому что std:: нужно указать перед cout в книге так же не написано, а без этого появляется ошибка.
Выходит что либо книга у меня старая, либо автор упускает некоторые моменты
278
10 июля 2011 года
Alexander92
1.1K / / 04.08.2008
1.
Цитата:

оператор #include


Это не оператор, это директива. Давайте общаться на грамотном языке.

2.

Цитата:

он подгружает в программу заголовочные файлы


Он не подгружает, а включает. Это разные вещи. А включать он может двумя способами:

  • #include <filename>. Включает файл filename, расположенный по стандартному пути, определенному переменной среды Include;
  • #include "filename". Включает файл filename, расположенный в той же директории, что и файл, в котором эта директива встретилась.
В вашем каталоге файла iostream.h нет, поэтому естественно, что директива
Цитата:

 
Код:
#include "iostream.h"


приводит к ошибке.

3.

Цитата:

заголовочный файл iostream будет использоваться в каждой программе


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

4.

Цитата:

о stdafx.h ничего не сказано. А без него программа не собирается


stdafx.h - это файл, который по умолчанию генерируется студией. Если бы вы послушали мой совет и создали пустой консольный проект, у вас бы не возникло этой проблемы.

5. Наконец, пару слов по поводу версий компилятора. В старых версиях не было файла iostream, был только файл iostream.h. Кроме того, пространство имен std было доступно по умолчанию, поэтому писать std:: перед cout было действительно не нужно. В новых версиях ситуация изменилась так, как я описал в предыдущем посте.

Кроме того, вы должны хорошо понимать, что MS VC++ - это всего лишь одна из реализаций C++, и не нужно намертво к ней привязываться. Когда читаете литературу и пробуете что-то писать, вникайте и разбирайтесь, какие моменты относятся непосредственно к языку, а какие - к его конкретной реализации.

316
10 июля 2011 года
Alm3n
889 / / 29.05.2009
Use Notepad, noob c++. или другую ide с другим компилятором, для простоты в первое время. иначе такие вопросы будут попадаться постоянно, а ты, как я вижу, не очень хорошо в них разбираешься.
забыл сказать. чтобы не писать везде std:: можно прописать using namespace std; перед void main(void).
69K
10 июля 2011 года
noob c++
21 / / 10.07.2011
Цитата: Alm3n
забыл сказать. чтобы не писать везде std:: можно прописать using namespace std; перед void main(void).



я так и сделал. спасибо
тут нашел топик про std - cyberforum.ru/cpp-beginners/thread102120.html

69K
10 июля 2011 года
noob c++
21 / / 10.07.2011
Можно ли подключить #include <iostream> в заголовочном файле stdafx.h ?

подключил. все работает
278
10 июля 2011 года
Alexander92
1.1K / / 04.08.2008
Можно. Более того - этот файл, как правило, и предназначен для включения заголовочных файлов, глобальных для всего проекта.
260
10 июля 2011 года
Ramon
1.1K / / 16.08.2003
Цитата: Alexander92
Можно. Более того - этот файл, как правило, и предназначен для включения заголовочных файлов, глобальных для всего проекта.



Назначение данного файла несколько иное, ибо сие есть "precompiled header".

278
10 июля 2011 года
Alexander92
1.1K / / 04.08.2008
Ramon, я это понимаю, я пытаюсь объяснить человеку, откуда взялся файлик в проекте и что с ним делать.=)
260
10 июля 2011 года
Ramon
1.1K / / 16.08.2003
Цитата: Alexander92
Ramon, я это понимаю, я пытаюсь объяснить человеку, откуда взялся файлик в проекте и что с ним делать.=)



Для начала, его лучше научить создавать пустой консольный проект.

69K
11 июля 2011 года
noob c++
21 / / 10.07.2011
Когда создаю пустой проект - окно куда вводить код программы отсутствует.
Остается только синий фон Visual C++ 2010 и снизу несколько вкладок: вывод, окно команд, список ошибок
278
11 июля 2011 года
Alexander92
1.1K / / 04.08.2008
Создай в проекте пустой cpp-файл. Будет тебе счастье.
69K
11 июля 2011 года
noob c++
21 / / 10.07.2011
Цитата: Alexander92
Создай в проекте пустой cpp-файл. Будет тебе счастье.


Спасибо.
Вписал такой код:

 
Код:
#include "stdafx.h"
#include <iostream>

int main()
{
    std::cout << "Hello, world!" << std::endl;
    return 0;
}


проект не запускается :(

 
Код:
1>------ Построение начато: проект: mycod, Конфигурация: Debug Win32 ------
1>LINK : error LNK2001: неразрешенный внешний символ "_mainCRTStartup"
1>c:\users\admin\documents\visual studio 2010\Projects\mycod\Debug\mycod.exe : fatal error LNK1120: 1 неразрешенных внешних элементов
========== Построение: успешно: 0, с ошибками: 1, без изменений: 0, пропущено: 0 ==========
2.1K
11 июля 2011 года
Norgat
452 / / 12.08.2009
В общем так: Создавай проект C++ типа Empty Project.
После чего создавай в нём файл main.cpp (или как ты хочешь его назвать, разрешение только .cpp оставь) с таким содержанием:

 
Код:
#include <iostream>

using namesapce std;

void main()
{
    cout << "Hello world!" << endl;
    cin.get();
}


Проекты Win32\CLR\MFC и т.д. пока не трогай, там будет автоматически создаваться некоторое кол-во кода, которое тебе не нужно сейчас.
278
11 июля 2011 года
Alexander92
1.1K / / 04.08.2008
Цитата: noob c++
Спасибо.
Вписал такой код:
 
Код:
#include "stdafx.h"
#include <iostream>

int main()
{
    std::cout << "Hello, world!" << std::endl;
    return 0;
}


проект не запускается :(

 
Код:
1>------ Построение начато: проект: mycod, Конфигурация: Debug Win32 ------
1>LINK : error LNK2001: неразрешенный внешний символ "_mainCRTStartup"
1>c:\users\admin\documents\visual studio 2010\Projects\mycod\Debug\mycod.exe : fatal error LNK1120: 1 неразрешенных внешних элементов
========== Построение: успешно: 0, с ошибками: 1, без изменений: 0, пропущено: 0 ==========



Ты опять создал Win32-проект вместо консольного.

69K
12 июля 2011 года
noob c++
21 / / 10.07.2011
С прошлой проблемой справился.
Возник один вопрос - чем отличаются эти коды (которые в принципе выполняют одно и то же, но написаны по разному):

 
Код:
#include <iostream>

using namesapce std;

int main()
{
     cout << "Hello, world!" << endl;
      return 0;
}


 
Код:
#include <iostream>

using namesapce std;

void main()
{
    std::cout << "Hello world!" << endl;
    cin.get();
}


 
Код:
#include <iostream.h>

    using namesapce std;

    void main(void)

    {
       cout << "Hello world!";
    }


В каждой книге по разному
278
12 июля 2011 года
Alexander92
1.1K / / 04.08.2008
Точка входа консольного приложения - это функция main(). Допускается несколько ее различных сигнатур. Каждая из них правильная. Кстати, пиши лучше iostream вместо iostream.h.
316
12 июля 2011 года
Alm3n
889 / / 29.05.2009
Влезу со своими вопросами. :)
Хорошо ли писать using namespace std; в заголовочных файлах? Если нет, то почему?
240
12 июля 2011 года
aks
2.5K / / 14.07.2006
Плохо. Нэймспейсы создавались не для того, чтобы их потом бездумно сливать. Если в cpp файле ты это можешь делать на свою ответственность, то вставив такую строчку в хедер - ты вынуждаешь сливать нэймспейсы пользователей твоего хэдера.
69K
12 июля 2011 года
noob c++
21 / / 10.07.2011
Цитата: aks
Плохо. Нэймспейсы создавались не для того, чтобы их потом бездумно сливать. Если в cpp файле ты это можешь делать на свою ответственность, то вставив такую строчку в хедер - ты вынуждаешь сливать нэймспейсы пользователей твоего хэдера.



Можно это как-то поподробнее ? Совершенно не понял написанное )

278
12 июля 2011 года
Alexander92
1.1K / / 04.08.2008
noob c++,
 
Код:
using Б.Страуструп. Язык программирования C++;

:)
69K
12 июля 2011 года
noob c++
21 / / 10.07.2011
Цитата: Alexander92
noob c++,
 
Код:
using Б.Страуструп. Язык программирования C++;



нет возможности читать pdf и djvu, т.к. редко нахожусь дома. читаю все что смогу найти
если знаете где это на странице сайта онлайн можно почитать - буду очень признателен :)

69K
15 июля 2011 года
noob c++
21 / / 10.07.2011
Всем привет.
Как писали ранее в этом топике, что VS вставляет шаблон по умолчанию если создан не пустой проект.
Возникло несколько вопросов:
1. Если мне нужно создать приложение Windows form, то можно ли его создать из пустого проекта ? В смысле: можно как-то добавить саму форму, элементы на нее ?
2. Если нет, то может быть можно как-то удалить шаблон из Windows Form ?
278
15 июля 2011 года
Alexander92
1.1K / / 04.08.2008
Во-первых: забудь о Windows Forms, пока не изучишь нормальный unmanaged C++. Во-вторых, какой тебе шаблон удалить надо?
69K
15 июля 2011 года
noob c++
21 / / 10.07.2011
То есть пока я язык не изучу лучше консольные писать ?
Мне понадобилась утилитка, которая записывает в каждую 8ю строку ту, которую я ей указал.
Если писать консольное, то нужно как-то из двух .тхт файлов все реализовывать. В одном вписана та строка которую нужно вставить, а в другом сама база в которую и будем вносить строку из первой .тхт. Думаю нужно будет воспользоваться \n, но как не на следующую перенести а на 8ю с его помощью. И наверно данные нужно писать в массив, тольео не знаю как примерно организовать. Не прошу код утилиты, просто направьте на правильный путь :)
278
15 июля 2011 года
Alexander92
1.1K / / 04.08.2008
Да, пока консольные. Потом медленно переходи на формы. А вообще, стремись писать на MFC, для C++ это самая лучшая платформа разработки под винду.

[QUOTE=noob c++]
Мне понадобилась утилитка, которая записывает в каждую 8ю строку ту, которую я ей указал.
[/QUOTE]
Поясни.
14
15 июля 2011 года
Phodopus
3.3K / / 19.06.2008
Цитата: noob c++
которая записывает в каждую 8ю строку ту, которую я ей указал.
...
В одном вписана та строка которую нужно вставить, а в другом сама база в которую и будем вносить строку из первой .тхт. Думаю нужно будет воспользоваться \n, но как не на следующую перенести а на 8ю с его помощью. Не прошу код утилиты, просто направьте на правильный путь :)



 
Код:
sed -e '8~8{
R b.txt
d
}' a.txt
240
16 июля 2011 года
aks
2.5K / / 14.07.2006
Цитата: noob c++
То есть пока я язык не изучу лучше консольные писать ?


Тут как бы дело не в том консольные или нет. Просто winforms - это .Net
И это уже не C++. При этом managed С++ (или как он там сейчас называется C++/CLI) далеко не лучший инструмент, чтобы изучить .Net, и уж точно очень плохой способ изучить C++.

Цитата: Alexander92
А вообще, стремись писать на MFC, для C++ это самая лучшая платформа разработки под винду.


:facepalm:

278
16 июля 2011 года
Alexander92
1.1K / / 04.08.2008
aks, а что вы можете предложить лучше? Именно под винду и именно под C++.
260
16 июля 2011 года
Ramon
1.1K / / 16.08.2003
Цитата: Alexander92
aks, а что вы можете предложить лучше? Именно под винду и именно под C++.



Qt, и не только под "винду".

69K
16 июля 2011 года
noob c++
21 / / 10.07.2011
Цитата: aks
Тут как бы дело не в том консольные или нет. Просто winforms - это .Net
И это уже не C++. При этом managed С++ (или как он там сейчас называется C++/CLI) далеко не лучший инструмент, чтобы изучить .Net, и уж точно очень плохой способ изучить C++.



То есть на чистом с++ нельзя создать графическую оболочку ? Нужно подключить Net или Qt ?
Как я понимаю Qt это прменение к с++ Netframework ? Сейчас по учебникам с++ штурмую, пока все более-менее понятно :)

260
16 июля 2011 года
Ramon
1.1K / / 16.08.2003
Язык и графическая оболочка это две разные вещи, стоит это осознать и чем раньше тем лучше.
69K
17 июля 2011 года
noob c++
21 / / 10.07.2011
Цитата: Phodopus
 
Код:
sed -e '8~8{
R b.txt
d
}' a.txt



Синтаксис какой-то странный )

278
17 июля 2011 года
Alexander92
1.1K / / 04.08.2008
А ты попробуй скомпиль, вдруг получится... :D
14
18 июля 2011 года
Phodopus
3.3K / / 19.06.2008
Цитата: noob c++
Синтаксис какой-то странный )


Главное что это работает из коробки и легко решает задачу :)

69K
19 июля 2011 года
noob c++
21 / / 10.07.2011
 
Код:
#include <iostream>
#include <fstream>

ofstream out;
out.("file.type"); //открываем файл
if (in==NULL) return 0; //если не смогли открыть файл, какая-либо ошибка
in<<"this string was wrote to file by c++;)"<<endl; //записываем в файл


Как здесь указать что нужно писать именно в 8ю строку ? И вообще возможно возможно ли так сделать или нужно построить как-то иначе ?
7
25 июля 2011 года
@pixo $oft
3.4K / / 20.09.2006
Нужно читать каждый раз по 7 строк,потом писать их в конечный файл,а потом приписывать 8ю

aks::)

А вообще,есть ещё WinAPI,на нём всё и построено.MFC–это своеобразная обёртка,и от неё сейчас вроде как уходят
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог