Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > GNU toolchain > No such file or directory


Автор: mekhanikus 4.9.2009, 13:48
CodeBlock 8.02, GNU GCC 3.4.5 Compiler.

Сделал заготовочку в виде класса.
Скомпилил, проверил - все ОК.
В заголовке класса инклюды:
Код

#include <sstream>
#include <string>
#include <iomanip>

Копирую файлы заготовки в другой проект,
получаю:
Код

D:\CODEBL~1\SETALA~1\CALENDAR.h 6 sstream: No such file or directory
D:\CODEBL~1\SETALA~1\CALENDAR.h 7 string: No such file or directory
D:\CODEBL~1\SETALA~1\CALENDAR.h 8 iomanip: No such file or directory

 smile 
Ничего не понимаю.

Автор: andrew_121 4.9.2009, 14:15
Цитата(mekhanikus @  4.9.2009,  13:48 Найти цитируемый пост)
Копирую файлы заготовки в другой проект,
получаю:

а другой проект С++ ? или Си ?
еще что-то с компилятором. мингв сам знает где лежат стандартные хидеры/библиотеки.

Автор: Romikgy 4.9.2009, 14:16
Цитата(mekhanikus @  4.9.2009,  12:48 Найти цитируемый пост)
CALENDAR.h

видать это забыл перенести 

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

Автор: andrew_121 4.9.2009, 14:50
Цитата(Romikgy @  4.9.2009,  14:16 Найти цитируемый пост)
видать это забыл перенести 

Да нет же. Он как раз есть. Это в нем ошибки.

Автор: Romikgy 4.9.2009, 19:27
ну и покажи его ....

Автор: andrew_121 4.9.2009, 22:48
Цитата(Romikgy @  4.9.2009,  19:27 Найти цитируемый пост)
ну и покажи его .... 

это ты мне? нет у меня этого файла.

Автор: mekhanikus 6.9.2009, 12:40
Цитата(andrew_121 @  4.9.2009,  14:15 Найти цитируемый пост)
а другой проект С++ ? или Си ?

тоже С++
Цитата(Romikgy @  4.9.2009,  14:16 Найти цитируемый пост)
учитесь , выкладывать код где ошибка , а не только ошибки перечислять 

Код разросся до 12 файлов. Не бог-весть что, но разбираться нужно будет долго.

Самое интересное то, что в проекте уже есть файл с точно такими же инклюдами.
И до добавления "Календаря" все компилилось.

Да и "Календарь" успешно протестирован в двух проектах.

Короче smile

Попробую создать проект заново. Может поможет.

Автор: Romikgy 6.9.2009, 14:55
Цитата(andrew_121 @  4.9.2009,  21:48 Найти цитируемый пост)

это ты мне? нет у меня этого файла. 

сорри andrew_121 почему то решил , что ты топикстартер...

Автор: ller 7.9.2009, 12:25
Кстати, MinGW может быть чувствительным к регистру и файлы Calendar.h и CALENDAR.h, это разные файлы как во всех *nix-ах

Автор: mekhanikus 7.9.2009, 13:16
Цитата(ller @  7.9.2009,  12:25 Найти цитируемый пост)
чувствительным к регистру

В этом плане все в порядке.
Компилятор видит файл "CALENDAR.h" и ругается если его удалить или переименовать.
Ругается именно на инклюды.

Создание нового проекта не помогает.

Может есть какое-то ограничение на глубину вложений?
Если добавить инклюд "CALENDAR.h" непосредственно в main.h, то в main.cpp можно использовать классы"Календаря".
Никаких "Но сач".

А у меня в "маин" доложен вызываться диалог, основаный на "CALENDAR.h".
Причем, отдельно диалог работает.

Даже незнаю, что еще предположить.

Автор: andrew_121 7.9.2009, 13:34
Цитата(ller @  7.9.2009,  12:25 Найти цитируемый пост)
Кстати, MinGW может быть чувствительным к регистру и файлы Calendar.h и CALENDAR.h, это разные файлы как во всех *nix-ах 

Хотелось бы. Но к сожалению, мингв этого не делает.

Автор: mekhanikus 7.9.2009, 14:09
Короче,  smile  smile  smile  - одни эмоции!

Сделал пустой проект - диалог с двумя кнопками.
Скомпилил, все ОК.
Добавляю "CALENDAR.h" в "main.h".
Получаю... догадайтесь с трех раз... 
Правильно!!! 
Код

D:\CODEBL~1\SETALA~1\CALENDAR.h 5 string: No such file or directory
D:\CODEBL~1\SETALA~1\CALENDAR.h 6 sstream: No such file or directory
D:\CODEBL~1\SETALA~1\CALENDAR.h 7 iomanip: No such file or directory
preprocessing failed.
=== Build finished: 4 errors, 0 warnings ===

Переношу "CALENDAR.h" в "main.cpp", получаю - "0 errors, 0 warnings"

Может я что не так делаю? Может я чего не правильно понимаю?  smile 

Автор: andrew_121 7.9.2009, 14:22
mekhanikus, покажи весь файл.

Автор: mekhanikus 7.9.2009, 15:37
Вот:
Код

///main.h

#include <windows.h>
#include "CALENDAR.h"

#define DLG_MAIN 101

#define BTN_TEST 1001
#define BTN_QUIT 1002

///main.cpp

#include "main.h"
//#include "CALENDAR.h"

DATECLASS dt;

BOOL CALLBACK DialogProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
    switch(uMsg)
    {
        case WM_INITDIALOG:
            return TRUE;

        case WM_CLOSE:
            EndDialog(hwndDlg, 0);
            return TRUE;

        case WM_COMMAND:
            switch(LOWORD(wParam))
            {
                case BTN_QUIT:
                    EndDialog(hwndDlg, 0);
                    return TRUE;

                case BTN_TEST:
                    std::string s = dt.toString();
                    MessageBox(hwndDlg, s.c_str(), "Information", MB_ICONINFORMATION);
                    return TRUE;
            }
    }

    return FALSE;
}


int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)
{
    SYSTEMTIME st;
    GetLocalTime(&st);

    dt = st;

    return DialogBox(hInstance, MAKEINTRESOURCE(DLG_MAIN), NULL, DialogProc);
}

///CALENDAR.h

#ifndef CALENDAR_H_INCLUDED
#define CALENDAR_H_INCLUDED

#include <string>
#include <sstream>
#include <iomanip>
#include <windows.h>

class DATECLASS
{
public:
    DATECLASS():Day(0),Month(0),Year(0){};
    DATECLASS(const SYSTEMTIME& DATE):
        Day(DATE.wDay),
        Month(DATE.wMonth),
        Year(DATE.wYear)
        {};
    short int NextDay();
    short int NextMonth();
    short int NextYear();

    friend std::ostream& operator<<(std::ostream&,const DATECLASS&);

    std::string toString()const
    {
        std::ostringstream os;
        os << (*this);
        return os.str();
    };
private:
    short int Day;
    short int Month;
    short int Year;
};

#endif // CALENDAR_H_INCLUDED

///CALENDAR.cpp

#include "CALENDAR.h"

short int DATECLASS::NextDay()
{
    return ++Day;
}

short int DATECLASS::NextMonth()
{
    return ++Month;
}

short int DATECLASS::NextYear()
{
    return ++Year;
}

std::ostream& operator<<(std::ostream& os,const DATECLASS& D)
{
    os << std::setw(2) << std::setfill('0') << D.Day << '.';
    os << std::setw(2) << std::setfill('0') << D.Month << '.';
    os << std::setw(4) << std::setfill('0') << D.Year;
    return os;
}

///resource.rc

#include "main.h"

DLG_MAIN DIALOGEX 6, 5, 194, 106

CAPTION "Dialog"

FONT 8, "MS Sans Serif", 0, 0, 1

STYLE 0x10CE0804

BEGIN
  CONTROL "&Test", BTN_TEST, "Button", 0x10010000, 138,  5, 46, 15
  CONTROL "&Quit", BTN_QUIT, "Button", 0x10010000, 138, 29, 46, 15
END

Это, конечно, только скелет, чтоб проще разбираться.
Но ошибки выдает как надо.  smile 

Автор: andrew_121 7.9.2009, 15:42
Цитата(mekhanikus @  7.9.2009,  15:37 Найти цитируемый пост)
#ifndef CALENDAR_H_INCLUDED
#define CALENDAR_H_INCLUDED

В main.h поставь стражи типа этих. Только имя поменяй.

Добавлено через 59 секунд
Цитата(mekhanikus @  7.9.2009,  15:37 Найти цитируемый пост)
///resource.rc
#include "main.h"

это убери.

Автор: mekhanikus 7.9.2009, 15:45
Код

||=== SetAlarm, Release ===|
D:\CODEBL~1\SETALA~1\CALENDAR.h|4|string: No such file or directory|
D:\CODEBL~1\SETALA~1\CALENDAR.h|5|sstream: No such file or directory|
D:\CODEBL~1\SETALA~1\CALENDAR.h|6|iomanip: No such file or directory|
||preprocessing failed.|
||=== Build finished: 4 errors, 0 warnings ===|

Тра-ля-ля,тра-ля-ля  smile 

Автор: bsa 7.9.2009, 21:56
mekhanikus, проверь каким компилятором компилируется исходник. Возможно, ты пытаешься компилировать сишным компилятором, а не С++.
Кстати, вывод ошибок какой-то странный.

Автор: Anikmar 7.9.2009, 22:04
Попробуйте в файле calendar.h
заменить строки
#include <string>
#include <sstream>
#include <iomanip>

на строки
#include <string.h>
#include <sstream.h>
#include <iomanip.h>

Автор: xvr 8.9.2009, 10:08
Цитата(mekhanikus @ 7.9.2009,  15:45)
Код

||=== SetAlarm, Release ===|
D:\CODEBL~1\SETALA~1\CALENDAR.h|4|string: No such file or directory|
D:\CODEBL~1\SETALA~1\CALENDAR.h|5|sstream: No such file or directory|
D:\CODEBL~1\SETALA~1\CALENDAR.h|6|iomanip: No such file or directory|
||preprocessing failed.|
||=== Build finished: 4 errors, 0 warnings ===|

Тра-ля-ля,тра-ля-ля  smile

#include "main.h" из .rс файла убрал?

Автор: mekhanikus 8.9.2009, 11:00
Цитата(bsa @  7.9.2009,  21:56 Найти цитируемый пост)
проверь каким компилятором компилируется исходник. Возможно, ты пытаешься компилировать сишным компилятором, а не С++.

И при перемещении "calendar.h" из main.h в main.cpp компилятор меняется?

Цитата(xvr @  8.9.2009,  10:08 Найти цитируемый пост)
#include "main.h" из .rс файла убрал?

Если это удалить, то получается "syntax error",
ругается на BTN_TEST и BTN_QUIT.

Добавлено через 4 минуты и 10 секунд
Цитата(Anikmar @  7.9.2009,  22:04 Найти цитируемый пост)
#include <string.h>
#include <sstream.h>
#include <iomanip.h>

Получаем:
Код

D:\CodeBlock\SetAlarmDlg\CALENDAR.h 5 sstream.h: No such file or directory
C:\Program Files\CodeBlocks\MinGW\bin\..\lib\gcc\mingw32\3.4.5\..\..\..\..\include\c++\3.4.5\backward\backward_warning.h 32 warning: #warning This file includes at least one deprecated or antiquated header. Please consider using one of the 32 headers found in section 17.4.1.2 of the C++ standard. Examples include substituting the <X> header for the <X.h> header for C++ includes, or <iostream> instead of the deprecated header <iostream.h>. To disable this warning use -Wno-deprecated.
D:\CodeBlock\SetAlarmDlg\CALENDAR.h  In member function `std::string DATECLASS::toString() const':
D:\CodeBlock\SetAlarmDlg\CALENDAR.h 26 error: aggregate `std::ostringstream os' has incomplete type and cannot be defined
=== Build finished: 2 errors, 1 warnings ===


Автор: Anikmar 8.9.2009, 11:18
Видимо все дело в смешении различных вариантов #include - в стиле C и С++

Автор: mekhanikus 8.9.2009, 11:24
Цитата(Anikmar @  8.9.2009,  11:18 Найти цитируемый пост)
Видимо все дело в смешении различных вариантов #include - в стиле C и С++ 

А поточнее? Как сделать в одном стиле?

Автор: Anikmar 8.9.2009, 11:27
Цитата(mekhanikus @  8.9.2009,  11:24 Найти цитируемый пост)
А поточнее? Как сделать в одном стиле? 

К сожалению данный компилятор я не знаю.

Это чисто догадка - после предложенных мной исправлений характер ошибок поменялся, значит копать надо в этом направлении. Может быть настройка путей, может быть режимы совместимости. Где-то там, мне кажется.

Автор: andrew_121 8.9.2009, 12:24
Это превосходный компилятор. все файлы в архив, выстави его куда-то.

Автор: mekhanikus 8.9.2009, 13:15
Цитата(andrew_121 @  8.9.2009,  12:24 Найти цитируемый пост)
выстави его куда-то. 

Донт андестенд  smile 

Автор: andrew_121 8.9.2009, 13:24
http://rghost.ru/

Автор: mekhanikus 8.9.2009, 13:47
Вот: http://rghost.ru/447685

Автор: Romikgy 8.9.2009, 14:38
Цитата(mekhanikus @  7.9.2009,  14:37 Найти цитируемый пост)
#include <string>
#include <sstream>
#include <iomanip>

Код

#include <string.h>
#include <sstream.h>
#include <iomanip.h>

?

Автор: andrew_121 8.9.2009, 14:55
Romikgy, он mingw использует. имена файлов правильные.

Автор: bsa 8.9.2009, 20:08
mekhanikus, создай еще один файл resource.h. В него пропиши все дифайны (BTN_TEST, BTN_QUIT и др.) из main.h. Инклюдь этот файл в resource.rc и main.cpp (и/или CALENDAR.cpp, если в нем используется эти дифайны).
Вся проблема в том, что ты не в том хидере расположил определения для ресурсов, потому что хидеры подключаемые в *.rc должны иметь только дифайны, а ты в нем инклюдил еще и стандартные заголовочные файлы, содержимое которых rcc (или winres? - короче компилятор ресурсов) понятия не имеет как обрабатывать.

Автор: xvr 8.9.2009, 20:10
Цитата(mekhanikus @ 8.9.2009,  11:00)
Цитата(xvr @  8.9.2009,  10:08 Найти цитируемый пост)
#include "main.h" из .rс файла убрал?

Если это удалить, то получается "syntax error",
ругается на BTN_TEST и BTN_QUIT.

А если не удалить, то получается то, что получается  smile Ну не понимает компилятор ресурсов С++ конструкции и хидеры, не понимает   smile 

Сделай отдельный хидер с ресурсами (твои BTN_TEST и BTN_QUIT) и включай его в main.h и в .rc (вместо main.h)

Смешивание С и С++ тут не при чем  smile 

Опередили

Автор: mekhanikus 9.9.2009, 13:36
Цитата(bsa @  8.9.2009,  20:08 Найти цитируемый пост)
создай еще один файл resource.h. В него пропиши все дифайны 

ОК! Будем попробовать.  smile 

Автор: mekhanikus 9.9.2009, 14:10
Со "скелетом" получилось!!!  smile

Пойду разгребать свои "авгиевы конюшни".  smile

P.S. А ведь и правда, все началось после того, как я перенес из *.срр в хидер календаря обьявления функций вместе с инклюдами.
А этот хидер уже был подключен в ресурсах календаря.  smile 

Автор: mekhanikus 10.9.2009, 13:53
Всем спасибо!

Все заработало.  smile

Будем двигаться дальше.
Уже не за горами новые препоны, которые нужно преодолеть.  smile 

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