C++ .h 和.cpp文件分开

C++ .h and .cpp file separate

本文关键字:文件 cpp C++      更新时间:2023-10-16

我试图将我的c ++代码分离到一个标头和一个cpp文件,但解释器显示一些错误。

这是我的代码:

密码.h:

#ifndef PASSWORD_H
#define PASSWORD_H
class Password {
private:
    string aliasName_;
    int hashOfPassword_;
public:
    void setAliasName(string aliasName);
    void setHashOfPassword(int hashOfPassword);
    string getAliasName() { return aliasName_; }
    int getHashOfPassword() { return hashOfPassword_; }
};
#endif

密码.cpp:

#include <string>
#include "Password.h"
using std::string;
void Password::setAliasName(string aliasName) {
    aliasName_ = aliasName;
}
void Password::setHashOfPassword(int hashOfPassword) {
    hashOfPassword_ = hashOfPassword;
}

错误:

Error   C2065   'aliasName_': undeclared identifier Xpassword.cpp  7
Error   C2511   'void Password::setAliasName(std::string)': overloaded member function not found in 'Password'  Xpassword.cpp  6
Error   C3646   'aliasName_': unknown override specifier    Xpassword.h    6
Error   C4430   missing type specifier - int assumed. Note: C++ does not support default-int    Xpassword.h    6
Error   C2061   syntax error: identifier 'string'   Xpassword.h    9
Error   C3646   'getAliasName': unknown override specifier  Xpassword.h    11
Error   C2059   syntax error: '('   Xpassword.h    11
Error   C2334   unexpected token(s) preceding '{'; skipping apparent function body  Xpassword.h    11

有人有什么想法吗?

您需要在

声明类之前移动using std::string

#ifndef PASSWORD_H
#define PASSWORD_H
#include <string>
using std::string;
class Password {
…

并将其从.cpp文件中删除。

此外,您可能希望使用#pragma once而不是传统的#ifndef/#define/#endif,最后您可能希望在需要时使参数和方法持续存在。

你需要移动

#include <string>
using std::string;

Password.h 内部,您可以从 Password.cpp 中删除这两行。

只需将std::添加到头文件中的每个string,请记住,您永远不应该在那里使用usingusing namespace!还应包含使用它们的文件的所有标头。