错误:重定义类[类名]
Error: redefinition of class [class name]
我经常看到这个错误,这里有很多关于它的问题,但是现在我真的不知道该怎么办。
User.h
#ifndef USER_H
#define USER_H
#endif // USER_H
#include <iostream>
using namespace std;
class User
{
private:
struct Accounts {string user, password, name;} accounts[2];
void setAccounts();
public:
int Access(string user, string password);
bool online;
User();
~User();
};
User.cpp
#include "User.h"
#include <iostream>
User::User() {/* data */}
User::~User() {/* data */}
void User::setAccounts()
{
accounts[0].user = "user01";
accounts[0].password = "pw01";
accounts[0].name = "hi";
accounts[1].user = "user02";
accounts[1].password = "pw02";
accounts[1].name = "hi2";
}
int User::Access(string user, string password)
{
unsigned short int i;
for (int i = 0; i <= 1; i++)
{
if (user.compare(this->accounts[i].user) == 0 and password.compare(this->accounts[i].password) == 0)
return 0;
}
return 1;
}
我甚至用了#pragma once
,它仍然不能识别类。我该怎么办?
@edit:我向下移动#endif // USER_H
,现在类已经被识别,但构造函数方法仍然错过。
"error: 'User::User()'有多个定义"
你应该把#endif // USER_H
放在头文件的末尾。只有#ifndef
和#endif
之间的内容被保护多次包含
#ifndef USER_H
#define USER_H
#include <iostream>
using namespace std;
class User
{
private:
struct Accounts {string user, password, name;} accounts[2];
void setAccounts();
public:
int Access(string user, string password);
bool online;
User();
~User();
};
#endif // USER_H
编辑
你不应该包含User.cpp
。
将#endif // USER_H
移到文件底部?
相关文章:
- 有没有一种方法可以在编译时获得作用域类名
- 从类继承时,继承的类是否会通过父类重新定义继承的变量
- 在C/C++中将变量名定义为__00000001有什么好处吗
- 错误:需要类名(链表c++)
- 使用子类覆盖基类中定义的函数
- C++20 概念:如何在"requires"子句中引用类名?
- 越界成员函数定义是否需要一个完全限定的类名,直到全局范围
- 如何在自己的定义中缩写类名?
- 如何将类名的一部分定义为宏
- 从Java到C++:如何在另一个自定义类中使用一个自定义类名var
- 错误:标识符类名未定义?为我在文件中创建的所有类获取此内容
- 为什么定义成员函数指针变量需要类名
- 未定义的引用错误:“类名::类成员”
- 包括 Windows 标头与用户定义的类名冲突
- Arduino 库错误,尚未定义类名
- 名称查找:在类定义中使用不合格类名/省略模板参数的缺点
- 如何在类名careercenter中定义数组类型customers,然后在.cpp文件中定义create, modify
- 错误:重定义类[类名]
- 在c++中定义类成员函数时是否有办法跳过类名?
- 在类定义的类名中,作用域解析操作符的作用是什么?