Я следую учебникам с 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: Все работает сейчас, большое спасибо.
Вам необходимо скомпилировать 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
ваша функция возвращается в ваш BMI.cpp, попробуйте с этим.
string BMI::getName() const
{
return newName;
}
int BMI::getHeight() const
{
return newHeight;
}
double BMI::getWeight() const
{
return newWeight;
}
g++ Main.cpp BMI.cpp
. Проблема в том, что вам нужно связать их вместе; мой GCC ржавый, но я думаю, что он скомпилирует их обоих и скомпонует в исполняемый файл с именем Main. Или вы можете скомпилировать их оба с помощью-c
затем запустить g ++ для двух полученных.o
файлов. Но вы также должны написать себе Makefile.g++ -o MyProgram Main.cpp BMI.cpp
должен сделатьg++ -o MyProgram Main.cpp BMI.cpp
дело.