错误:重新定义类[类名]

时间:2016-09-02 00:44:01

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

我已经看到了很多错误,这里有很多问题,但现在我真的不知道该怎么办。

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,现在该类已被识别,但构造函数方法仍然遗漏。

  

“错误:'User :: User()'”

的多个定义

2 个答案:

答案 0 :(得分: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。只应包含头文件。

答案 1 :(得分:0)

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