根据错误代码,编译器 (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.hcmake-build-debug-msvc-2019/UACvLogin.i10.2MB 此文件显示UACvLogin.cpp.cmake-build-debug-msvc-2019/UACmUsers.i10.2MB 此文件显示UACmUsers.cpp.cmake-build-debug-msvc-2019/UACcDefault.i10.2MB 此文件显示UACcDefault.cpp.