【问题标题】:print() not a member of class?print() 不是班级成员?
【发布时间】:2014-11-19 21:30:11
【问题描述】:

我正在尝试在 C++ Visual Studio 2008 中运行 getter/setter 代码,并拥有我的头文件、实现文件和主文件。主要有一个打印函数(P1.print();),它试图打印类对象P1。我收到print() 不是 Persontype 成员的错误。当我在标题中声明 void print(); 时,出现 3 个错误 -----

Persontest.obj : error LNK2005: _main already defined in proj1.obj -----
Persontest.obj : error LNK2019: unresolved external symbol "public: void __thiscall  
Persontype::print(void)" (?print@Persontype@@QAEXXZ) referenced in function _main ----- fatal error LNK1120: 1 unresolved externals.

有人可以帮我解决这个问题吗?

Persontype.h(头文件):

#ifndef H_Persontype
#define H_Persontype

#include <iostream>
#include <string>

using namespace std;



class Persontype{

public:
Persontype();

Persontype(string fn, string mn, string ln, char g);

//setter
void setfirstName(string fn);
void setmiddleName(string mn);
void setlastName(string ln);
void setGender(char g);

//getter
string getfirstName() const;
string getlastName() const;
string getmiddleName() const;
char getGender() const;

private:
string firstName;
string middleName;
string lastName;
char gender;


};

#endif/

Person.cpp(实现文件):

#include <iostream>
#include <string>
#include "Persontype.h"
using namespace std;






//default constructor
Persontype::Persontype()
{
firstName = "Me";
middleName = "My";
lastName = "Mine";
gender = 'X';
}

//specific constructor
Persontype::Persontype(string fn, string mn, string ln, char g){
firstName = fn;
middleName = mn;
lastName = ln;
gender = g;
}

//setters
void Persontype::setfirstName(string fn)
{
firstName = fn;
}

void Persontype::setmiddleName(string mn)
{
middleName = mn;
}

void Persontype::setlastName(string ln)
{
lastName = ln;
}

void Persontype::setGender(char g)
{
gender = g;
}

//getters
string Persontype::getfirstName () const
{
   return firstName;
}

string Persontype::getmiddleName () const
{
   return middleName;
}

string Persontype::getlastName () const
{
   return lastName;
}

char Persontype::getGender() const
{
return gender;
}

Persontest.cpp(主文件):

#include "Persontype.h"

int main(){

Persontype P1("tom","smith","alice",'m');

P1.print();
}

【问题讨论】:

  • 嗯,错误信息再清楚不过了——你没有一个名为print()的方法,即你需要实现Persontype::print()
  • 通过 const 引用将字符串传递给函数。如果它们是类的成员,您甚至可以通过 const 引用返回它们。

标签: c++ function class printing main


【解决方案1】:

当然,你需要both在标题的Persontype类声明中声明它:

void print() const;

并在 .cpp 文件中定义它:

void Persontype::print(void) const
{
  cout << "My name is " << getfirstName() << ", I live on the second floor\n";
}

关于多个main() 的错误与print() 无关,这是您在未显示的代码或构建程序的方式中所犯的其他错误。

【讨论】:

  • 我在 .cpp 中尝试过如上 - 错误。在 abc.obj 中找到一个或多个乘法符号且 main 已定义???
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-09
  • 2012-06-25
  • 2012-01-15
  • 2020-12-26
  • 1970-01-01
相关资源
最近更新 更多