2016-09-02 8 views
2

나는이 오류를 많이 보았으며 여기에 대해 많은 의문점이 있지만 지금은 무엇을 해야할지 정말로 모른다.Error : [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을 사용했는데 여전히 클래스를 인식하지. 어떻게해야합니까?

@ 편집 :#endif // USER_H으로 이동했지만 클래스가 인식되었지만 생성자 메서드가 여전히 누락되었습니다.

"error: multiple definitions of 'User::User()'"

+3

당신의 포함 된 감시는 ... 음 ... 아무 것도. – tkausl

+0

#pragma가 #if .. #endrag guard # 123를 제거하면 #pragma는 정상적으로 처리됩니다. – SnoozeTime

+0

#pragma를 올바른 위치에 넣었다 고 가정하면 :-) – pm100

답변

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을 포함하지 않아야합니다. 헤더 파일 만 포함되어야합니다.

+0

여전히 작동하지 않습니다. 컴파일러에는 User :: User()에 대한 여러 정의가 있다고합니다. 여전히 컴파일러 문제입니다. –

+0

@ Chisté User.cpp "어딘가에 #include 했습니까? – songyuanyao

+0

네, main.cpp에 넣었습니다. 틀렸어? –

0

#endif // USER_H을 파일 맨 아래로 옮깁니 까?

+0

여전히 작동하지 않습니다. 컴파일러에는 User :: User()에 대한 여러 정의가 있다고합니다. 여전히 컴파일러 문제입니다. –