【问题标题】:Error: redefinition of class [class name]错误:重新定义类 [类名]
【发布时间】:2016-09-02 00:44:01
【问题描述】:

这个错误我见多了,这里有很多关于它的问题,但现在我真的不知道该怎么办。

用户.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();
};

用户.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,现在类已经被识别了,但是构造方法还是漏掉了。

“错误:'User::User()'的多个定义”

【问题讨论】:

  • 你的包含守卫确实......好吧......什么都没有。
  • #pragma once 应该没问题,如果你去掉 #if .. #endif 守卫
  • 假设 #pragma once 被放置在正确的位置 :-)

标签: c++ error-handling include-guards


【解决方案1】:

您应该将#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。只应包含头文件。

【讨论】:

  • 还是不行。编译器说 User::User() 有多个定义。它仍然是一个编译器问题。
  • @Chisté 你有没有#include "User.cpp" 某处?
  • 哦 zzzzz,有。另一个菜鸟错误 hausyh21ijksajhyghui thx
  • @Chisté 是的,只应包含头文件。
【解决方案2】:

#endif // USER_H 移动到文件底部?

【讨论】:

  • 还是不行。编译器说 User::User() 有多个定义。它仍然是一个编译器问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-09-27
  • 2014-11-01
  • 1970-01-01
  • 2020-02-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多