Ошибка компиляции учебника по c ++ (softwareHelp.org)

0

Я следую учебникам с youtube. Кажется, я столкнулся с ошибкой, которую не могу решить сам. Цель состоит в том, чтобы создать класс под названием BMI, который принимает имя и высоту имени пользователя и распечатывает их.

Я пытаюсь скомпилировать его с помощью g++, и я подозреваю, что не делаю это правильно. Обычно я просто делаю g++ filename.cpp, как я должен в этом случае?

Учебник изначально в том, что Microsoft.... вещь, я не знаю, это имя. сожалею

Спасибо, код приведен ниже.

Ошибка

/tmp/ccRcewk3.o: In function 'main':
Main.cpp:(.text+0x7d): undefined reference to 'BMI::BMI()'
Main.cpp:(.text+0x89): undefined reference to 'BMI::getWeight() const'
Main.cpp:(.text+0x9a): undefined reference to 'BMI::getHeight() const'
Main.cpp:(.text+0xaf): undefined reference to 'BMI::getName() const'
Main.cpp:(.text+0x14f): undefined reference to 'BMI::~BMI()'
Main.cpp:(.text+0x184): undefined reference to 'BMI::~BMI()'
collect2: ld returned 1 exit status

main.cpp

#include <iostream>
#include <string>

#include "BMI.h"

using namespace std;

/**************************************************/
int main()
{
  string name;
  int height;
  double weight;

  cout << "Enter your name: ";
  cin >> name;

  cout << "Enter your height (cm): ";
  cin >> height;

  cout << "Enter your weight (kg): ";
  cin >> weight;

  BMI Student_1;

  cout << endl << "Patient name: " << Student_1.getName() << endl <<
    "Height: " << Student_1.getHeight() << endl <<
    "Weight: " << Student_1.getWeight() << endl;
  return 0; 
}
/**************************************************/

BMI.h

// Header ==> Function Declarations

#include <iostream>
#include <string>

using namespace std;

// tu ide klasa
#ifndef BMI_H
#define BMI_H

class BMI
{
 public:
  //Default Constructor
  BMI();

  //Overload Constructor
  BMI(string, int, double);

  //Destructor
  ~BMI();

  // Accessor functions
  string getName() const;
  // // // returns name of patient

  int getHeight() const;
  // // // returns height of patient

  double getWeight() const;
  // // // returns weight of patient


 private:
  // member variables
  string newName;
  int newHeight;
  double newWeight;

};

#endif

BMI.cpp:

//Function definitions

#include "BMI.h"

// to access function inside a class

BMI::BMI()
{
  newHeight = 0;
  newWeight = 0.0;
}

BMI::BMI(string name, int height, double weight)
{
  newName = name;
  newHeight = height;
  newWeight = weight;
}

BMI::~BMI()
{

}

string BMI::getName() const
{
  return newName;
}

int BMI::getHeight() const
{
  return newHeight;
}

int BMI::getWeight() const
{
  return newWeight;
}

edit: ОК, спасибо всем, я решил часть проблемы. Тем не менее, вы немного меня смутили с редактированием, поэтому я закончу.

Кажется, что исходный код не работает, и я чувствую, что он должен. Во всяком случае, отредактированный код из вопроса тоже не работает.

Итак, я постараюсь сделать это снова. Но спасибо, теперь я знаю, как скомпилировать. :)

edit2: Все работает сейчас, большое спасибо.

  • 0
    Попробуйте g++ Main.cpp BMI.cpp . Проблема в том, что вам нужно связать их вместе; мой GCC ржавый, но я думаю, что он скомпилирует их обоих и скомпонует в исполняемый файл с именем Main. Или вы можете скомпилировать их оба с помощью -c затем запустить g ++ для двух полученных .o файлов. Но вы также должны написать себе Makefile.
  • 1
    g++ -o MyProgram Main.cpp BMI.cpp должен сделать g++ -o MyProgram Main.cpp BMI.cpp дело.
Показать ещё 4 комментария
Теги:
g++

2 ответа

2

Вам необходимо скомпилировать main.cpp в Main.o и BMI.cpp в BMI.o.

g++ -c Main.cpp
g++ -c BMI.cpp

Затем вам нужно связать оба объектных файла в один исполняемый файл (и ссылку на стандартный C++ lib)

g++ -o myprog Main.o BMI.o -lstdc++

Запустите пример с помощью

./myprog

Там, кажется, больше ошибок, у меня нет времени исправлять, пожалуйста, продолжайте. :-)

[marc@quadfork ~/test]$./myprog
Enter your name: foo
Enter your height (cm): 23
Enter your weight (kg): 2

Patient name:
Height: 0
Weight: 0
  • 0
    См. Комментарии выше или "info gcc" о том, как это сделать.
1

ваша функция возвращается в ваш BMI.cpp, попробуйте с этим.

string BMI::getName() const
{
  return newName;
}

int BMI::getHeight() const
{
  return newHeight;
}

double BMI::getWeight() const
{
  return newWeight;
}
  • 0
    В то время как у пользователя будет это как проблема, это не имеет никакого отношения к текущей ошибке.
  • 0
    Вы правы, в программе есть несколько ошибок .. Я пытаюсь исправить их в вопросе.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню