Проблема с разделением класса на заголовочный (.h) и исходный (. cpp) файл - PullRequest
3 голосов
/ 05 апреля 2020

Поэтому я попытался разделить класс на декларацию и определение, и я подумал, что у меня все хорошо, но когда я попытался скомпилировать его, я получил это сообщение об ошибке. Я не вижу, в чем проблема, но я подозреваю, что это как-то связано с простым правилом синтаксиса.

Сообщения об ошибках

...         ...: g++ -o main.exe Dog.cpp main.cpp
Dog.cpp:11:6: error: no declaration matches 'void Dog::setName(int)'
 void Dog::setName(int name){
      ^~~
In file included from Dog.cpp:1:
Dog.h:10:8: note: candidate is: 'void Dog::setName(std::__cxx11::string)'
   void setName(string name);
        ^~~~~~~
Dog.h:6:7: note: 'class Dog' defined here
 class Dog{
       ^~~
Dog.cpp:23:5: error: no declaration matches 'int Dog::getAge()'
 int Dog::getAge(){
     ^~~
In file included from Dog.cpp:1:
Dog.h:11:10: note: candidate is: 'std::__cxx11::string Dog::getAge()'
   string getAge();
          ^~~~~~
Dog.h:6:7: note: 'class Dog' defined here
 class Dog{
       ^~~

Это используемые файлы: main. cpp

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


//Functions



int main(){
  //Variables
  string userInput;

  //Code
  Dog dolly("Dolly", 3);

  cout<<dolly.getName();
  cout<<dolly.getAge();


  return 0;
}

Dog.h

#ifndef DOG_H
#define DOG_H
#include <string>
using namespace std;

class Dog{
public:
  Dog(string name, int age);
  string getName();
  void setName(string name);
  string getAge();
  void setAge(int age);
private:
  int Age;
  string Name;
protected:

};


#endif // DOG_H

Dog. cpp

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

Dog::Dog(string name, int age){
  setName(name);
  setAge(age);
};

void Dog::setName(int name){
  Name = name;
};

string Dog::getName(){
  return Name;
};

void Dog::setAge(int age){
  Age = age;
};

int Dog::getAge(){
  return Age;
};

Заранее спасибо за ответы!

1 Ответ

2 голосов
/ 05 апреля 2020

Сообщение об ошибке совершенно ясно.

Ваши сигнатуры функций не совпадают.

В вашем заголовке вы объявляете

void setName(string name);

Но в вашем файле реализации вы есть

void Dog::setName(int name)

Та же проблема с getAge. Подписи не совпадают.

...