Люди объясните пожалуйста неграмотному... Почему нельзя добавлять в вс8 несколько спп файлов с кодом ? Скажу честно - не копался, просто интересно :/ К примеру: только что пользовал вс8, был один файл с кодом 0001.cpp, добавил ещё один файл 0002.cpp, начал собирать мне вс8 написала 60 ошибок, ругалась в основном что незнает ни какие константы,типы переопределённые микрософтом итд Сменил расширение с 0002.cpp на 0002.hpp всё заработало. Спасибо.
компилятор (если ему не указать явно) определяет язык (си или си++) по расширению. в частности, следующий код main(){printf("ftw\n");} при помещении в .c файл откомпилируется нормально, а в .cpp выдаст ошибку.
2kaspersky спасибо. Стыдно конечно... но если честно, всё равно не понятно . Просто в том то и дело, что проект состоял из cpp файлов, верней файла, всё нормально было, добавил второй cpp файл - куча ошибок... :/
kaspersky просто надо писать корректно, а не через жопу. достаточно добавить нужный хидер и все будет компилироваться как C, так и C++.
censored ага. хидер. и замедление времени компиляции. спасибо. я лучше пешком постою _s4 если после изменения расширения ошибки исчезли, это говорит о том, что включаемый файл написан на си, а не на си++ (у си менее жесткая типизация и он прощает программисту многие вольности и ошибки), точнее сказать не могу. нужно смотреть сам файл, но вполне возможно, что там просто не объявлены вызываемые функции, определенные в остальных включаемых файлах. попробуй включать файл после того, как подключишь остальные.
_s4 Это потому, что этот файл теперь вообще не задействован в компиляции. Почему ты сразу решил, что проблема в количестве файлов? Попробуй создать проект с одним файлом 0002.cpp.
2kaspersky, green спасибо. Теоретически вроде всё понятно. Но вот в том то и дело, что второй файл я добавляю через меню Project -> Add New item -> C++ File(.cpp). При чём переименовал его просто, средствами Windows - из 0002.cpp в 0002.hpp, патом в Solution Explorer удалил запись о старом файле, и добавил о новом опять же в Solution Explorer, так всё работает :/ . А на счёт содержимого, да вроде особо сложного там нет ни чего... Два файла - 0001.cpp - главная ф-ция + пара небольших ф-ций, 0002.cpp - тот который добавляю, в нём всё, что связано с интерфейсом для пользователя. 2 ф-ции в нём всего. Почему то, если честно, мне кажется, что я сам туплю в чём то... :/
_s4 Вот именно. При добавлении файла, вижуалка определяет для него build tool, исходя из его расширения. Т.к. расширение .hpp, то файл добавляется в проект просто как хедер, т.е. напрямую в компиляции проекта не задействуется.
2green... дык.. это... стой Наоборот, я добавляю 0002.cpp и с ним не работает, меняю его расширение на hpp и с ним уже работает.
_s4 что значит "работает" ? Если ты имеешь в виду, что исчезают ошибки компиляции, то это из-за того, что 0002.hpp просто не компилируется.
_s4 А почему бы просто не сказать, какие именно ошибки? Чем гадать на кофейной гуще, давно бы разобрались уже.
2green,maxdiver я же писал, что всё стало нормально, файл добавлен в проект и собирается вместе с остальными, ошибки какие пишит я ещё в первом посте написал... Ругается на то что, ни чего не знает, переопределённые типы данных от микрософт константы ихние итдитд сменил расширение, всё нормально собралось. Вот тот файл про который я говорю, где аттачить файлы я не нашёл , хотя это не имеет значения, хоть там будет только MessageBox(1,2,3,MB_OK) - скажет, что неизвестная ф-ция, MB_OK - неизвестная константа... У меня уже была похожая "проблема?" с вс8 - я добавил файл просто через File - > New -> File -> c++ он его тоже не видил... блин где то я туплю паходу... :/ Код (Text): DWORD dwPageSize; extern bool preGenDump(TCHAR *,TCHAR *); bool GetPath(HWND); /* */ BOOL CALLBACK MainDlgProc(HWND hwnd,UINT umsg,WPARAM wparam,LPARAM lparam) { if (umsg == WM_INITDIALOG) { // MessageBox(hwnd,TEXT("WM_INITDIALOG"),NULL,MB_OK); return 1; } else if (umsg == WM_COMMAND) { if (LOWORD(wparam) == IDEXIT) EndDialog(hwnd,0); else if (LOWORD(wparam) == IDC_CHSOURCE) GetPath(GetDlgItem(hwnd,IDC_SOURCE)); else if (LOWORD(wparam) == IDC_CHDEST) GetPath(GetDlgItem(hwnd,IDC_DEST)); else if (LOWORD(wparam) == IDGO) { __try { HANDLE hHeap = GetProcessHeap(); TCHAR *source = (TCHAR *) HeapAlloc(hHeap,HEAP_ZERO_MEMORY | HEAP_GENERATE_EXCEPTIONS,dwPageSize); TCHAR *dest = (TCHAR *) HeapAlloc(hHeap,HEAP_ZERO_MEMORY | HEAP_GENERATE_EXCEPTIONS,dwPageSize); SendMessage(GetDlgItem(hwnd,IDC_SOURCE), WM_GETTEXT,dwPageSize - 1,(LPARAM) source); SendMessage(GetDlgItem(hwnd,IDC_DEST), WM_GETTEXT,dwPageSize - 1,(LPARAM) dest); preGenDump(source,dest); HeapFree(hHeap,0,source); HeapFree(hHeap,0,dest); } __except(EXCEPTION_EXECUTE_HANDLER) { ; } } } return 0; } bool _interface(void) { HINSTANCE hInst = GetModuleHandle(0); DialogBoxParam(hInst,MAKEINTRESOURCE(IDD_MAIN),0,MainDlgProc,0); return 0; } bool GetPath(HWND hwnd) { LPOPENFILENAME ofn; HANDLE hHeap = GetProcessHeap(); TCHAR *mem; __try { __try { mem = (TCHAR *) HeapAlloc(hHeap,HEAP_GENERATE_EXCEPTIONS | HEAP_ZERO_MEMORY,dwPageSize); } __except(EXCEPTION_EXECUTE_HANDLER) { ; /* ... */ } ofn = new OPENFILENAME; ZeroMemory(ofn,sizeof(OPENFILENAME)); ofn->lStructSize = sizeof(OPENFILENAME); ofn->lpstrFilter = TEXT("All files\\*.*\0*.*\0\0"); ofn->lpstrFile = mem; ofn->nMaxFile = dwPageSize; ofn->Flags = OFN_LONGNAMES; if (!GetOpenFileName(ofn)) { delete ofn; HeapFree(hHeap,0,mem); return 1; // error } SendMessage(hwnd,WM_SETTEXT,0,(LPARAM) ofn->lpstrFile); delete ofn; } __except(EXCEPTION_EXECUTE_HANDLER) { return 1; } HeapFree(hHeap,0,mem); return 0; }
_s4 Значит так - в самом начале этого 0002.hpp добавь такой код (буквально): Код (Text): @!$%^& - this crap cannot be compiled и попробуй будет ли работать теперь.
2green ты же сам написал: "This crap cannot be complited !" ) 100% файл собирается. ок не веришь мне на слово, так поверь хотя бы моему зрению в этом файле процедура обработки сообщений для диалога, каторый всего один я бы тупо не видел окошко при запуске и ошибки были бы уже в тех файлах где я ф-ции вызываю из этого файла... Вообще памойму вариант, что 0002.hpp не участвует в проекте должен сразу отпасть. хз вообщем :/
_s4 странно, что файл .hpp добавляется в проект как компилируемый... Может у тебя где-то прописан инклуд для этого hpp... хотя вряд ли Я так понял, precompiled headers ты не используешь. Впиши в начало 0002.cpp #include <windows.h>
2green блин )) Но он у меня и включён в другом файле инклудом, я не стал говорить, почему то подумал, что это по умолчанию учитывается Вот так выглядит примерно 0001.cpp с верху: #include <windows.h> #include "0002.hpp"
2green ну так в том и дело, что он включён, всё вроде должно быть нормально, но всё не нормально Меняю расширение у файла, расширение в инклуде + то что описывал выше, всё начинает работать...