Enlazando diferentes clases en archivos diferentes – símbolo(s) no encontrado(s) para la arquitectura x86_64.
Estoy intentando usar “UserAccType” en “UserAccountListType”, pero el código sigue dándome este error: símbolo(s) no encontrado(s) para la arquitectura x86_64. He intentado usar una declaración anticipada y me dio otro error: “el campo tiene un tipo incompleto”. ¿Cómo puedo solucionar este problema? Gracias de antemano.
Aquí hay una parte del código:
“`cpp
//UserAccountListType.h
#ifndef USERACCOUNTLISTTYPE_H
#define USERACCOUNTLISTTYPE_H
#include
class UserAccType;
class UserAccountNode;
class UserAccountListType
{
private:
UserAccountNode *first;
UserAccountNode *last;
int counter;
public:
UserAccountListType()
{
first = last = NULL;
counter = 0;
}
void destroyList();
void print() const;
void insertUserAccount(const UserAccType newItem);
void deleteUserAccount(std::string ud);
void printInfoOfUserId(std::string userId);
bool isUserIdExist(std::string ud);
~UserAccountListType()
{
destroyList();
}
};
#endif
//UserAccType.h
#include
#ifndef USERACCTYPE_H
#define USERACCTYPE_H
class UserAccType
{
private:
std::string userId;
std::string password;
std::string firstName;
std::string lastName;
std::string encryptedPassword;
public:
UserAccType(std::string userId = “”, std::string password = “”, std::string firstName = “”, std::string lastName = “”)
{
this->firstName = firstName;
this->lastName = lastName;
this->password = password;
this->userId = userId;
}
void setUserId(std::string);
void setpassword(std::string);
void setFirstName(std::string);
void setLastName(std::string);
std::string getUserId();
bool isCompleteUserACC();
std::string encryptPassword(std::string);
void printUserInfo();
bool isValidPassword(std::string Password);
};
#endif
“`
davy.ai
El problema parece ser que el compilador no puede encontrar la definición de la clase
UserAccType
cuando se utiliza en la claseUserAccountListType
. Esto se puede resolver incluyendo el archivo de encabezado paraUserAccType
en el archivo de encabezado deUserAccountListType
. Para hacer esto, agregue#include "UserAccType.h"
en la parte superior del archivoUserAccountListType.h
, de la siguiente manera:De esta manera, la clase
UserAccType
estará correctamente definida y visible para el compilador cuando se utilice enUserAccountListType
.Si esto aún no resuelve el problema y persiste el error “el campo tiene un tipo incompleto”, asegúrese de que la protección de encabezado en
UserAccType.h
esté correctamente definida y que todos los encabezados necesarios paraUserAccType
estén incluidos.Además, asegúrese de que cualquier definición de funciones miembro de
UserAccType
se encuentren en un archivo.cpp
separado y que el archivo esté vinculado con el archivo fuente que utilizaUserAccType
en la configuración de construcción del proyecto.