Однажды проблема с #ifndef и #pragma - PullRequest
1 голос
/ 05 апреля 2010

Я хочу написать программу со следующей структурой

stdafx.h - содержит некоторые #define определения констант программы и #include заголовков, которые используются во всех проектах.

frmMain.h - связывающий код Form1 также может отображать form2 и использует некоторый код из BckHeadr.h, а некоторые функции вызывают, что заголовки включены в stdafx.h.

frmIniPrgs.h - содержит код формы Form2 и использует некоторый код из BckHeadr.h, а некоторые функции вызывают, что заголовки включены в stdafx.h.

BckHeadr.h - содержит некоторые определения функций, а некоторые функции вызывают, что заголовки включены в stdafx.h.

Я знаю, что я должен использовать директивы #ifndef или #pragma. Но я не могу решить эту проблему. Я включил в stdafx.h: frmIniPrgs.H, BckHeadr.h, frmMain.h. И используйте #ifndef во всех модулях. Я использую это так:

#ifndef MYMODULE_H
#define MYMODULE_H
//module code
#endif

В моем проекте есть следующие ошибки (у меня русская визуальная студия, и текст ошибок переведен google translate и может содержать ошибки, ScnIniPackages - моя функция в BckHeadr.h):

BckHeadr.h (96): error C3861: PtrToStringChars: identifier not found 
BckHeadr.h (141): error C2065: vector: undeclared identifier 
BckHeadr.h (141): error C2062: type "int" is not required 
BckHeadr.h (141): error C2143: syntax error: no ";" before "(" 
BckHeadr.h (141): error C2447: (: missing function header (possibly using a formal list of old type) 
BckHeadr.h (169): error C2065: vector: undeclared identifier 
frmIniPrgs.h (119): error C2065: vector: undeclared identifier 
frmIniPrgs.h (122): error C3861: ScnIniPackages: identifier not found 
frmIniPrgs.h (121): error C2065: vector: undeclared identifier 
C: \ Program Files \ Microsoft SDKs \ Windows \ v6.0A \ include \ Wininet.h (381): error C2872: FILETIME: ambiguous symbol 
    be 'C: \ Program Files \ Microsoft SDKs \ Windows \ v6.0A \ include \ windef.h (377): _FILETIME FILETIME' 
    or 'c: \ windows \ microsoft.net \ framework \ v2.0.50727 \ mscorlib.dll: System:: Runtime:: InteropServices:: FILETIME' 

Ответы [ 2 ]

1 голос
/ 02 июня 2011

Вы должны включить правильные заголовки STL.

#include <vector>

Также вы можете добавить пространство имен как

using namespace std;

Или использовать классы STL как

std::vector<>
1 голос
/ 02 июня 2011

Попробуйте

#include <vector>
using namespace std;

Это может решить некоторые ошибки (если не все).

...