Visual studio 2005

Тема в разделе "LANGS.C", создана пользователем _s4, 7 май 2007.

  1. _s4

    _s4 New Member

    Публикаций:
    0
    Регистрация:
    24 окт 2006
    Сообщения:
    58
    Люди объясните пожалуйста неграмотному... Почему нельзя добавлять в вс8 несколько спп файлов с кодом ? Скажу честно - не копался, просто интересно :/
    К примеру: только что пользовал вс8, был один файл с кодом 0001.cpp, добавил ещё один файл 0002.cpp, начал собирать мне вс8 написала 60 ошибок, ругалась в основном что незнает ни какие константы,типы переопределённые микрософтом итд
    Сменил расширение с 0002.cpp на 0002.hpp всё заработало.
    Спасибо.
     
  2. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    можно.
     
  3. censored

    censored New Member

    Публикаций:
    0
    Регистрация:
    5 июл 2005
    Сообщения:
    1.615
    Адрес:
    деревня "Анонимные Прокси"
    Ктото не умеет пользоваться компиляторов\ide -- только и всего.
     
  4. kaspersky

    kaspersky New Member

    Публикаций:
    0
    Регистрация:
    18 май 2004
    Сообщения:
    3.006
    компилятор (если ему не указать явно) определяет язык (си или си++) по расширению. в частности, следующий код main(){printf("ftw\n");} при помещении в .c файл откомпилируется нормально, а в .cpp выдаст ошибку.
     
  5. _s4

    _s4 New Member

    Публикаций:
    0
    Регистрация:
    24 окт 2006
    Сообщения:
    58
    2kaspersky спасибо. Стыдно конечно... но если честно, всё равно не понятно :dntknw:.
    Просто в том то и дело, что проект состоял из cpp файлов, верней файла, всё нормально было, добавил второй cpp файл - куча ошибок... :/
     
  6. censored

    censored New Member

    Публикаций:
    0
    Регистрация:
    5 июл 2005
    Сообщения:
    1.615
    Адрес:
    деревня "Анонимные Прокси"
    kaspersky
    просто надо писать корректно, а не через жопу.
    достаточно добавить нужный хидер и все будет компилироваться как C, так и C++.
     
  7. kaspersky

    kaspersky New Member

    Публикаций:
    0
    Регистрация:
    18 май 2004
    Сообщения:
    3.006
    censored
    ага. хидер. и замедление времени компиляции. спасибо. я лучше пешком постою ;)

    _s4
    если после изменения расширения ошибки исчезли, это говорит о том, что включаемый файл написан на си, а не на си++ (у си менее жесткая типизация и он прощает программисту многие вольности и ошибки), точнее сказать не могу. нужно смотреть сам файл, но вполне возможно, что там просто не объявлены вызываемые функции, определенные в остальных включаемых файлах. попробуй включать файл после того, как подключишь остальные.
     
  8. green

    green New Member

    Публикаций:
    0
    Регистрация:
    15 июл 2003
    Сообщения:
    1.217
    Адрес:
    Ukraine
    _s4
    Это потому, что этот файл теперь вообще не задействован в компиляции. :)
    Почему ты сразу решил, что проблема в количестве файлов?
    Попробуй создать проект с одним файлом 0002.cpp.
     
  9. _s4

    _s4 New Member

    Публикаций:
    0
    Регистрация:
    24 окт 2006
    Сообщения:
    58
    2kaspersky, green спасибо. Теоретически вроде всё понятно. Но вот в том то и дело, что второй файл я добавляю через меню Project -> Add New item -> C++ File(.cpp). При чём переименовал его просто, средствами Windows :) - из 0002.cpp в 0002.hpp, патом в Solution Explorer удалил запись о старом файле, и добавил о новом опять же в Solution Explorer, так всё работает :/ .
    А на счёт содержимого, да вроде особо сложного там нет ни чего... Два файла - 0001.cpp - главная ф-ция + пара небольших ф-ций, 0002.cpp - тот который добавляю, в нём всё, что связано с интерфейсом для пользователя. 2 ф-ции в нём всего. Почему то, если честно, мне кажется, что я сам туплю в чём то... :/
     
  10. green

    green New Member

    Публикаций:
    0
    Регистрация:
    15 июл 2003
    Сообщения:
    1.217
    Адрес:
    Ukraine
    _s4
    Вот именно. При добавлении файла, вижуалка определяет для него build tool, исходя из его расширения. Т.к. расширение .hpp, то файл добавляется в проект просто как хедер, т.е. напрямую в компиляции проекта не задействуется.
     
  11. _s4

    _s4 New Member

    Публикаций:
    0
    Регистрация:
    24 окт 2006
    Сообщения:
    58
    2green... дык.. это... стой :) Наоборот, я добавляю 0002.cpp и с ним не работает, меняю его расширение на hpp и с ним уже работает.
     
  12. green

    green New Member

    Публикаций:
    0
    Регистрация:
    15 июл 2003
    Сообщения:
    1.217
    Адрес:
    Ukraine
    _s4
    что значит "работает" ? Если ты имеешь в виду, что исчезают ошибки компиляции, то это из-за того, что 0002.hpp просто не компилируется.
     
  13. maxdiver

    maxdiver Max

    Публикаций:
    0
    Регистрация:
    18 июл 2006
    Сообщения:
    308
    Адрес:
    Саратов
    _s4
    А почему бы просто не сказать, какие именно ошибки? Чем гадать на кофейной гуще, давно бы разобрались уже.
     
  14. _s4

    _s4 New Member

    Публикаций:
    0
    Регистрация:
    24 окт 2006
    Сообщения:
    58
    2green,maxdiver я же писал, что всё стало нормально, файл добавлен в проект и собирается вместе с остальными, ошибки какие пишит я ещё в первом посте написал... Ругается на то что, ни чего не знает, переопределённые типы данных от микрософт константы ихние итдитд сменил расширение, всё нормально собралось.
    Вот тот файл про который я говорю, где аттачить файлы я не нашёл :dntknw: , хотя это не имеет значения, хоть там будет только
    MessageBox(1,2,3,MB_OK) - скажет, что неизвестная ф-ция, MB_OK - неизвестная константа... :dntknw:
    У меня уже была похожая "проблема?" с вс8 - я добавил файл просто через File - > New -> File -> c++ :) он его тоже не видил... блин где то я туплю паходу... :/

    Код (Text):
    1. DWORD dwPageSize;
    2. extern bool preGenDump(TCHAR *,TCHAR *);
    3. bool GetPath(HWND);
    4.  
    5. /*
    6. */
    7. BOOL CALLBACK MainDlgProc(HWND hwnd,UINT umsg,WPARAM wparam,LPARAM lparam)  {
    8.     if (umsg == WM_INITDIALOG)  {
    9. //      MessageBox(hwnd,TEXT("WM_INITDIALOG"),NULL,MB_OK);
    10.  
    11.         return 1;
    12.     }
    13.     else if (umsg == WM_COMMAND)    {
    14.         if (LOWORD(wparam) == IDEXIT)               EndDialog(hwnd,0);
    15.         else if (LOWORD(wparam) == IDC_CHSOURCE)    GetPath(GetDlgItem(hwnd,IDC_SOURCE));
    16.         else if (LOWORD(wparam) == IDC_CHDEST)      GetPath(GetDlgItem(hwnd,IDC_DEST));
    17.         else if (LOWORD(wparam) == IDGO)    {
    18.             __try   {
    19.                 HANDLE hHeap = GetProcessHeap();
    20.                 TCHAR *source = (TCHAR *) HeapAlloc(hHeap,HEAP_ZERO_MEMORY | HEAP_GENERATE_EXCEPTIONS,dwPageSize);
    21.                 TCHAR *dest = (TCHAR *) HeapAlloc(hHeap,HEAP_ZERO_MEMORY | HEAP_GENERATE_EXCEPTIONS,dwPageSize);
    22.                 SendMessage(GetDlgItem(hwnd,IDC_SOURCE), WM_GETTEXT,dwPageSize - 1,(LPARAM) source);
    23.                 SendMessage(GetDlgItem(hwnd,IDC_DEST), WM_GETTEXT,dwPageSize - 1,(LPARAM) dest);
    24.                 preGenDump(source,dest);
    25.                 HeapFree(hHeap,0,source);
    26.                 HeapFree(hHeap,0,dest);
    27.             }
    28.             __except(EXCEPTION_EXECUTE_HANDLER) {   ;
    29.             }
    30.         }
    31.     }
    32.  
    33.     return 0;
    34. }
    35.  
    36.  
    37. bool _interface(void)   {
    38. HINSTANCE hInst = GetModuleHandle(0);
    39.    
    40.     DialogBoxParam(hInst,MAKEINTRESOURCE(IDD_MAIN),0,MainDlgProc,0);
    41.  
    42.     return 0;
    43. }
    44.  
    45. bool GetPath(HWND hwnd) {
    46. LPOPENFILENAME ofn;
    47. HANDLE hHeap = GetProcessHeap();
    48. TCHAR *mem;
    49.  
    50.     __try   {
    51.         __try   {
    52.             mem = (TCHAR *) HeapAlloc(hHeap,HEAP_GENERATE_EXCEPTIONS | HEAP_ZERO_MEMORY,dwPageSize);
    53.         }
    54.         __except(EXCEPTION_EXECUTE_HANDLER) {   ; /* ... */ }
    55.  
    56.         ofn = new OPENFILENAME;
    57.         ZeroMemory(ofn,sizeof(OPENFILENAME));
    58.         ofn->lStructSize = sizeof(OPENFILENAME);
    59.         ofn->lpstrFilter = TEXT("All files\\*.*\0*.*\0\0");
    60.         ofn->lpstrFile = mem;
    61.         ofn->nMaxFile = dwPageSize;
    62.         ofn->Flags = OFN_LONGNAMES;
    63.         if (!GetOpenFileName(ofn))  {
    64.             delete ofn;
    65.             HeapFree(hHeap,0,mem);
    66.                
    67.             return 1;       //  error
    68.         }
    69.         SendMessage(hwnd,WM_SETTEXT,0,(LPARAM) ofn->lpstrFile);
    70.         delete ofn;
    71.     }
    72.     __except(EXCEPTION_EXECUTE_HANDLER) {   return 1;
    73.     }
    74.    
    75.     HeapFree(hHeap,0,mem);
    76.     return 0;
    77. }
     
  15. green

    green New Member

    Публикаций:
    0
    Регистрация:
    15 июл 2003
    Сообщения:
    1.217
    Адрес:
    Ukraine
    _s4
    Значит так - в самом начале этого 0002.hpp добавь такой код (буквально):
    Код (Text):
    1. @!$%^& - this crap cannot be compiled
    и попробуй будет ли работать теперь.
     
  16. _s4

    _s4 New Member

    Публикаций:
    0
    Регистрация:
    24 окт 2006
    Сообщения:
    58
    2green :) ты же сам написал: "This crap cannot be complited !" :)) 100% файл собирается. ок не веришь мне на слово, так поверь хотя бы моему зрению :) в этом файле процедура обработки сообщений для диалога, каторый всего один :) я бы тупо не видел окошко при запуске :) и ошибки были бы уже в тех файлах где я ф-ции вызываю из этого файла... Вообще памойму вариант, что 0002.hpp не участвует в проекте должен сразу отпасть. хз вообщем :/
     
  17. green

    green New Member

    Публикаций:
    0
    Регистрация:
    15 июл 2003
    Сообщения:
    1.217
    Адрес:
    Ukraine
    _s4
    странно, что файл .hpp добавляется в проект как компилируемый...
    Может у тебя где-то прописан инклуд для этого hpp... хотя вряд ли

    Я так понял, precompiled headers ты не используешь. Впиши в начало 0002.cpp
    #include <windows.h>
     
  18. _s4

    _s4 New Member

    Публикаций:
    0
    Регистрация:
    24 окт 2006
    Сообщения:
    58
    2green блин :))) Но он у меня и включён в другом файле инклудом, я не стал говорить, почему то подумал, что это по умолчанию учитывается :)
    Вот так выглядит примерно 0001.cpp с верху:

    #include <windows.h>
    #include "0002.hpp"
     
  19. green

    green New Member

    Публикаций:
    0
    Регистрация:
    15 июл 2003
    Сообщения:
    1.217
    Адрес:
    Ukraine
    _s4
    Блин, ну ты даешь...
     
  20. _s4

    _s4 New Member

    Публикаций:
    0
    Регистрация:
    24 окт 2006
    Сообщения:
    58
    2green ну так в том и дело, что он включён, всё вроде должно быть нормально, но всё не нормально :) Меняю расширение у файла, расширение в инклуде + то что описывал выше, всё начинает работать...