根据错误代码,编译器 (MSVC 2019) 未检测到正确声明的类。
在下面的代码中,编译器在UACvLogin
类UACcDefault
定义中第一次提及时停止。
[\src\UAC\controllers\UACcDefault.h][1]
:
#ifndef MANAGER_UACCDEFAULT_H
#define MANAGER_UACCDEFAULT_H
#include "src/includes.h"
#include "../views/UACvLogin.h"
#include "../models/UACmUsers.h"
//class UACvLogin;
//class UACmUsers;
class UACcDefault {
public:
UACcDefault();
UACcDefault(int iMaxLogin, UACmUsers* mUsers = nullptr, UACvLogin* viewLogin = nullptr);
virtual ~UACcDefault();
int GetUserid() const;
void SetUserid(int userid);
const wxString& GetUsername() const;
void SetUsername(const wxString& username);
const wxString& GetPassword() const;
void SetPassword(const wxString& password);
int GetContactid() const;
void SetContactid(int contactid);
bool GetLoggedIn();
protected:
private:
UACmUsers* mUsers;
UACvLogin* viewLogin;
int iMaxLogin;
};
#endif //MANAGER_UACCDEFAULT_H
错误消息是:
src/UAC/controllers/UACcDefault.h(19): error C2061: syntax error: identifier 'UACvLogin'
src/UAC/controllers/UACcDefault.h(37): error C2143: syntax error: missing ';' before '*'
src/UAC/controllers/UACcDefault.h(37): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
src/UAC/controllers/UACcDefault.h(37): error C2238: unexpected token(s) preceding ';'
我研究了代码 , C2061
, C2143
, C4430
,C2238
它们表明编译器没有检测到UACvLogin
之前已经声明的代码。
每当我采取措施减轻这些错误时,例如将代码更改UACvLogin
为不是指针时,我都会收到以下错误消息:
src/UAC/controllers/UACcDefault.h(37): error C3646: 'viewLogin': unknown override specifier
src/UAC/controllers/UACcDefault.h(37): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
编译器现在关注viewLogin
变量的名称 ( ),而不是类型。如果我UACvLogin* viewLogin
从头文件中删除(该变量当前仅用于一种方法),或者取消注释该class UACvLogin;
行,编译器会将其焦点更改为UACmUsers
标识符:
src/UAC/controllers/UACcDefault.h(36): error C2143: syntax error: missing ';' before '*'
src/UAC/controllers/UACcDefault.h(36): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
src/UAC/controllers/UACcDefault.h(36): error C2238: unexpected token(s) preceding ';'
如果我取消注释两个类声明class UACvLogin;
和class UACmUsers;
,编译器会抱怨 SOCI 库。我不会在这里引用错误消息。
我使用选项执行构建/P
以查看预处理器输出,并且包含将类声明放在它们应该在的位置:在UACcDefault
类中使用/引用它们之前。
有人可以帮我找出这个错误的原因吗?
整个项目在GitHub 上。
src\includes.h
../views/UACvLogin.h
=src\UAC\views\UACvLogin.h
../models/UACmUsers.h
=src\UAC\models\UACmUsers.h
cmake-build-debug-msvc-2019/UACvLogin.i
10.2MB 此文件显示UACvLogin.cpp
.cmake-build-debug-msvc-2019/UACmUsers.i
10.2MB 此文件显示UACmUsers.cpp
.cmake-build-debug-msvc-2019/UACcDefault.i
10.2MB 此文件显示UACcDefault.cpp
.