C++,构造函数:'class'的外联定义与'class'中的任何声明都不匹配

C++, Constructors: Out-of-line definition of 'class' does not match any declaration in 'class'

本文关键字:class 任何 声明 不匹配 定义 构造函数 C++      更新时间:2023-10-16

所以我试图用C++编程一个目标心率计算器,当我试图构建它时,返回了这个错误。只是为了让你知道,我被指示分离实现和接口。

这是接口

#include <iostream>
#include <string>
class HeartRates
{
public:
// constructor initialize HeartRates
HeartRates( std::string, std::string, int, int, int );
// Setting each variable
void setFirstName( std::string );
void setLastName( std::string );
void setdobMonth( int );
void setdobDay( int );
void setdobYear( int );
void setCurrentYear( int );
std::string getFirstName() const;
std::string getLastName() const;
int getdobMonth() const;
int getdobDay() const;
int getdobYear() const;
int getCYear() const;
int getAge() const;
int getMaximumHeartRate() const;
int getTargetHeartRate() const;

private:
std::string firstName;
std::string lastName;
int dobMonth;
int dobDay;
int dobYear;
int currentYear;
};

下面是的实现

#include <iostream>
#include <string>
#include "HeartRates.h"
using namespace std;
// constructor that initializes all the stuff

这一行给了我这个错误:"心率"的越界定义与"心率"中的任何声明都不匹配

HeartRates::HeartRates( string first, string last, int M, int D, int Y, int cY )
{
    setFirstName( first );
    setLastName( last );
    setdobMonth( M );
    setdobDay( D );
    setdobYear( Y );
    setCurrentYear( cY );
}

继续使用代码

// set functions
void HeartRates::setFirstName( string first )
{
    firstName = first; // store the first name in the object
}

void HeartRates::setLastName( string last )
{
    lastName = last; // store the last name in the object
}
void HeartRates::setdobMonth( int M )
{
    dobMonth = M; // store the month of birth in the object
}
void HeartRates::setdobDay( int D )
{
    dobDay = D; // store the day of birth in the object
}
void HeartRates::setdobYear( int Y )
{
    dobYear = Y; // store the year of birth in the object
}
void HeartRates::setCurrentYear( int cY )
{
    currentYear = cY;
}

// get functions
string HeartRates::getFirstName() const
{
    return firstName; // return user's first name
}
string HeartRates::getLastName() const
{
    return lastName; // return user's last name
}
int HeartRates::getdobMonth() const
{
    return dobMonth;
}
int HeartRates::getdobDay() const
{
    return dobDay;
}
int HeartRates::getdobYear() const
{
    return dobYear;
}
int HeartRates::getCYear() const
{
    return currentYear;
}

// Functions
int HeartRates::getAge() const
{
     int age;
    age = currentYear-dobYear;
   return age;
}

int HeartRates::getMaximumHeartRate() const
{
    int maxHeartRate;
    maxHeartRate = 220 - getAge();
    return maxHeartRate;
}
int HeartRates::getTargetHeartRate() const
{
    int targetHeartRate;
    targetHeartRate = getMaximumHeartRate() * 0.85;
    return targetHeartRate;
}

很抱歉设置了格式并复制粘贴了所有内容。新手,我只是不知道代码的哪一部分出错了。

HeartRates( std::string, std::string, int, int, int );

2个字符串和3个内部

HeartRates::HeartRates( string first, string last, int M, int D, int Y, int cY )

2个字符串和4个内部

我今天遇到了类似的问题,我的解决方案略有不同,所以我将把它放在这里,以防将来对任何人都有帮助。我在头中向前声明了一个在适当名称空间之外的类,所以我的错误看起来像这样:

1. Type of 1st parameter of member declaration does not match definition
'const std::shared_ptr<MyClass> &' (aka 'const shared_ptr<MyClass> &') vs
'const std::shared_ptr<MyClass> &' (aka 'const shared_ptr<myNamespace::MyClass> &'))

对我来说,解决方案是在名称空间内转发声明该类,而不是在名称空间外

错误:

class MyClass;
namespace myNamespace {
}

好:

namespace myNamespace {
class MyClass;
}