error C2146: 语法错误 : 缺少“;”(在标识符“Lang”的前面) error C2501: “Lang” : 缺少存储类或类型说明符

时间:2021-06-19 17:13:54
为什么老报这个错误 网上查是头文件包含错误 可我这个就是头文件啊 代码如下:


#pragma once
#include <vector>
#include <string>

#ifdef UNICODE
#define tstring std::wstring
#else 
#define tstring std::string
#endif

#ifdef _TAGLANGSTRUCT_H
#define _TAGLANGSTRUCT_H

typedef struct tagLangStruct
{
TCHAR strLangName[256];
TCHAR strFileName[256];
}LangStruct;

#endif

#ifdef _CLANGUAGEMANAGER_H
#define _CLANGUAGEMANAGER_H

class CLanguageManager
{
public:
CLanguageManager(void);
~CLanguageManager(void);
int EnumAll(void);
LPCTSTR  GetString(LPCTSTR  strID);
void GetLangList(std::vector<tstring>& listLangName);
protected:
std::vector<LangStruct> m_listLang;
TCHAR  m_strSelLang[256];
TCHAR  m_strBuffer[512];
public:
int SetSel(LPCTSTR strSelLang);
int SetSel(int nSelLang);
};

#endif

extern CLanguageManager Lang;


12 个解决方案

#1


错误在最后 要定义一个变量 类型定义就在上面 还是找不到类型定义

#2


全局数据放cpp文件中试试,记得包含该头文件

#3


#pragma once
#include <vector>
#include <string>

#ifdef UNICODE
#define tstring std::wstring
#else 
#define tstring std::string
#endif

#ifndef _TAGLANGSTRUCT_H
#define _TAGLANGSTRUCT_H

typedef struct tagLangStruct
{
TCHAR strLangName[256];
TCHAR strFileName[256];
}LangStruct;

#endif

#ifndef _CLANGUAGEMANAGER_H
#define _CLANGUAGEMANAGER_H

class CLanguageManager
{
public:
CLanguageManager(void);
~CLanguageManager(void);
int EnumAll(void);
LPCTSTR  GetString(LPCTSTR  strID);
void GetLangList(std::vector<tstring>& listLangName);
protected:
std::vector<LangStruct> m_listLang;
TCHAR  m_strSelLang[256];
TCHAR  m_strBuffer[512];
public:
int SetSel(LPCTSTR strSelLang);
int SetSel(int nSelLang);
};

#endif

extern CLanguageManager Lang;

#4


你这么写 不错才怪 #ifdef _CLANGUAGEMANAGER_H 
#define _CLANGUAGEMANAGER_H
 

#5


我发的那个 已经改过  编译没错 可以运行  

#6


第一个
#ifdef _TAGLANGSTRUCT_H
#define _TAGLANGSTRUCT_H
换成
#ifndef _TAGLANGSTRUCT_H
#define _TAGLANGSTRUCT_H

#7


看不懂啊。。。。

#8


引用 5 楼 XIAIBIANCHENG 的回复:
我发的那个 已经改过  编译没错 可以运行

error C2011: “tagLangStruct” : “struct”类型重定义
参见“tagLangStruct”的声明
error C2011: “CLanguageManager” : “class”类型重定义
参见“CLanguageManager”的声明

变成这个了 error C2146: 语法错误 : 缺少“;”(在标识符“Lang”的前面) error C2501: “Lang” : 缺少存储类或类型说明符

#9


我这边编译没问题啊  难道你在其它地方还有定义

#10


引用 9 楼 XIAIBIANCHENG 的回复:
我这边编译没问题啊  难道你在其它地方还有定义
没有吧 找到那个定义 右键转到定义就是这里啊

#11


那就不知道了 我能编译通过 你仔细检查检查吧

#12


偶遇到类似问题都是用
“每次用/*...*/注释掉不同部分再重新编译,直到定位到具体语法出错的位置。”
的方法解决的。

#1


错误在最后 要定义一个变量 类型定义就在上面 还是找不到类型定义

#2


全局数据放cpp文件中试试,记得包含该头文件

#3


#pragma once
#include <vector>
#include <string>

#ifdef UNICODE
#define tstring std::wstring
#else 
#define tstring std::string
#endif

#ifndef _TAGLANGSTRUCT_H
#define _TAGLANGSTRUCT_H

typedef struct tagLangStruct
{
TCHAR strLangName[256];
TCHAR strFileName[256];
}LangStruct;

#endif

#ifndef _CLANGUAGEMANAGER_H
#define _CLANGUAGEMANAGER_H

class CLanguageManager
{
public:
CLanguageManager(void);
~CLanguageManager(void);
int EnumAll(void);
LPCTSTR  GetString(LPCTSTR  strID);
void GetLangList(std::vector<tstring>& listLangName);
protected:
std::vector<LangStruct> m_listLang;
TCHAR  m_strSelLang[256];
TCHAR  m_strBuffer[512];
public:
int SetSel(LPCTSTR strSelLang);
int SetSel(int nSelLang);
};

#endif

extern CLanguageManager Lang;

#4


你这么写 不错才怪 #ifdef _CLANGUAGEMANAGER_H 
#define _CLANGUAGEMANAGER_H
 

#5


我发的那个 已经改过  编译没错 可以运行  

#6


第一个
#ifdef _TAGLANGSTRUCT_H
#define _TAGLANGSTRUCT_H
换成
#ifndef _TAGLANGSTRUCT_H
#define _TAGLANGSTRUCT_H

#7


看不懂啊。。。。

#8


引用 5 楼 XIAIBIANCHENG 的回复:
我发的那个 已经改过  编译没错 可以运行

error C2011: “tagLangStruct” : “struct”类型重定义
参见“tagLangStruct”的声明
error C2011: “CLanguageManager” : “class”类型重定义
参见“CLanguageManager”的声明

变成这个了 error C2146: 语法错误 : 缺少“;”(在标识符“Lang”的前面) error C2501: “Lang” : 缺少存储类或类型说明符

#9


我这边编译没问题啊  难道你在其它地方还有定义

#10


引用 9 楼 XIAIBIANCHENG 的回复:
我这边编译没问题啊  难道你在其它地方还有定义
没有吧 找到那个定义 右键转到定义就是这里啊

#11


那就不知道了 我能编译通过 你仔细检查检查吧

#12


偶遇到类似问题都是用
“每次用/*...*/注释掉不同部分再重新编译,直到定位到具体语法出错的位置。”
的方法解决的。