Поиск:

Ответ в темуСоздание новой темы Создание опроса
> MS Visual C++ и язык. Странности и соответствие стандарту... 
V
    Опции темы
test0
Дата 13.2.2008, 01:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 13.2.2008

Репутация: нет
Всего: нет



В Studio 2005 создано простое MFC приложение на основе шаблона приложения с диалоговым окном.
Добавлена кнопка, обработчик:

Код

void CMFAppDlg::OnBnClickedButton1()
{
    FILE* in, out;
    in = fopen("input.txt","r");
    if (in == NULL)
    {
        MessageBoxW(L"Can't read input file.\0",NULL, NULL);
        abort();
    }
    out = fopen("output.txt","w");  // Ругается на эту строку.
    if (out == NULL)
        MessageBoxW(L"Can't open output file.\0",NULL, NULL);
}


Ругательство:

Код

error C2679: binary '=' : no operator found which takes a right-hand operand of type 'FILE *' (or there is no acceptable conversion)


Если определить in и out вот так:

Код

    FILE* in;
    FILE* out;


то всё замечательно собирается.

Еще пара странностей:

1. Полностью игнорируется 
Код

#define _CRT_SECURE_NO_DEPRECATE

Надо менять warning level ?

2. Если подключаю собственный заголовочный файл (с описанием класса, без внешних связей) в начало файла, то он игнорируется, а если помещаю директиву непросредственно перед методом - успешно считывается.

Пример.
Process.h:
Код

#pragma once

class Process
{
public:
    Process(void);
public:
    ~Process(void);
};

Process.cpp:
Код

#include "StdAfx.h" // Ради FILE *
#include "Process.h"

Process::Process(void)
{
}

Process::~Process(void)
{
}



Помещаем в обработчик экземпляр класса:
MFCAppDlg.cpp:
Код

#include "Process.h"
#include "stdafx.h"
#include "MFCApp.h"
#include "MFCAppDlg.h"

//... Здесь код, сгенерированный Visual Studio.
// Наш обработчик:
void CMFCHtmlParseDlg::OnBnClickedButton1()
{
     Process p;
}


Получаем error C2065: 'Process' : undeclared identifier

Если поместить директиву непосредственно перед методом - все замечательно соберется.

Стою на асфальте я в лыжи обутый... Но ведь как-то же люди VS пользуются ?
PM MAIL   Вверх
Greeen
Дата 13.2.2008, 01:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 710
Регистрация: 13.8.2006
Где: Петербург

Репутация: 10
Всего: 18



Код

void CMFAppDlg::OnBnClickedButton1()
{
    FILE *in, *out; // 2 указателя
    in = fopen("input.txt","r");
    if (in == NULL)
    {
        MessageBoxW(L"Can't read input file.\0",NULL, NULL);
        abort();
    }
    out = fopen("output.txt","w");
    if (out == NULL)
        MessageBoxW(L"Can't open output file.\0",NULL, NULL);
}


Код

#include "stdafx.h" // stdafx.h подключается первым
#include "Process.h"
#include "MFCApp.h"
#include "MFCAppDlg.h"

void CMFCHtmlParseDlg::OnBnClickedButton1()
{
     Process p;
}



--------------------
Подпись больше не нужна
PM MAIL ICQ Skype   Вверх
dizzy1984
Дата 13.2.2008, 07:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 675
Регистрация: 15.2.2007

Репутация: 10
Всего: 25



Цитата(Greeen @  13.2.2008,  03:23 Найти цитируемый пост)
#include "stdafx.h" // stdafx.h подключается первым

Я правильно понял, что при включенном pre compiled header файле любой текст до include "stdafx.h игнорируется?
PM MAIL   Вверх
test0
Дата 13.2.2008, 11:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 13.2.2008

Репутация: нет
Всего: нет



Greeen,
Спасибо за ответ.
PM MAIL   Вверх
Greeen
Дата 13.2.2008, 13:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 710
Регистрация: 13.8.2006
Где: Петербург

Репутация: 10
Всего: 18



Цитата(dizzy1984 @  13.2.2008,  07:16 Найти цитируемый пост)
Я правильно понял, что при включенном pre compiled header файле любой текст до include "stdafx.h игнорируется? 

да  smile 


--------------------
Подпись больше не нужна
PM MAIL ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема »


 




[ Время генерации скрипта: 0.0437 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.