xcode C++,构造函数:“类”的外定义与“类”中的任何声明都不匹配

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/29327607/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-09-15 06:53:20  来源:igfitidea点击:

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

c++xcode

提问by bughHD

So I was trying to program a target heart rate calculator in C++ and when I tried to build it, this error was returned. Just to let you know, I am instructed to separate the implementation and interface.

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

Here's the interface

这是界面

#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;
};

And here's the implementation

这是实现

#include <iostream>
#include <string>
#include "HeartRates.h"

using namespace std;

// constructor that initializes all the stuff

This is the line that is giving me this error: Out-of-line definition of 'HeartRates' does not match any declaration in 'HeartRates'

这是给我这个错误的行:“HeartRates”的线外定义与“HeartRates”中的任何声明都不匹配

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 );
}

Continue on with the code

继续看代码

// 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;
}

Sorry for the formatting and copy and pasting everything. Newbie here, I just don't know which part of the code went wrong.

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

回答by Yudaev Alexander

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

2 strings and 3 int.

2 个字符串和 3 个整数。

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

2 strings and 4 int.

2 个字符串和 4 个整数。

回答by Mike

I had a similar issue today and my fix was slightly different, so I'll throw this here in case it ever helps anyone in the future. I had forward declared a class OUTSIDE of the appropriate namespace in the header, so my error looked something like this:

我今天遇到了类似的问题,我的修复略有不同,所以我会把它扔在这里,以防它将来对任何人有帮助。我在头文件中预先声明了一个适当命名空间的 OUTSIDE 类,所以我的错误看起来像这样:

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> &'))

The solution for me was to forward declare that class inside the namespace, rather than outside it.

我的解决方案是在名称空间内而不是在名称空间外转发声明该类。

Bad:

坏的:

class MyClass;

namespace myNamespace {

}

Good:

好的:

namespace myNamespace {

class MyClass;

}