Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
TyLinka
32 / 32 / 11
Регистрация: 02.02.2012
Сообщений: 177
#1

Конструктор класса - C++

14.12.2013, 19:37. Просмотров 227. Ответов 6
Метки нет (Все метки)

Необходимо, чтобы при задании планеты (сферы) высчитывался гравитационный параметр, желательно в конструкторе. Данный код не компилируется, выдаются ошибки LNK2028, LNK2019 и LNK1120.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
class sphere
{
protected:
    double M; // масса 
    double R;
    const double PI = 3.14159265358979323846; // число пи
public:
    void init_sphere(double m, double r);
    double get_M();
    double get_R();
    double get_PI();
};
class planet : public sphere
{
private:
    const double G = 6.67384e-11;
    double K; // гравитационный параметр
public:
    planet();
    double get_G();
    double get_K();
};
planet::planet()
{
    K = G*M;
}
Подскажите, пожалуйста, что не так!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.12.2013, 19:37
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Конструктор класса (C++):

Конструктор класса не видит конструктор по умолчанию другого класса - C++
Ошибка, естественно, в Classes.cpp, в строке 20. Ругается, что у класса TailNode нет конструктора по умолчанию, хотя он там, конечно, есть....

Конструктор производного класса требует конструктор предка - C++
Выдаёт вот такую вот ошибку: no matching function for call to 'Cube::Cube()' class Cube { protected: int magInt; bool...

Пример класса с конструктором и деструктором, создание экземпляра класса через конструктор с параметрами - C++
Привести пример класса с конструктором и деструктором, созданием экземпляра класса с помощью конструктора с параметрами.

Создать конструктор копий и оператор присваивания для класса компьютер и члена класса марка - C++
Создать конструктор копий и оператор присваивания для класса компьютер и члена класса марка. Всем огромное спасибо за помощь! |

В конструктор класса передать объект этого класса - C++
Вопрос на засыпку :) Как в конструктор класса передать объект этого класса? Т.е. class A { public: A(const char* s){} ...

Конструктор класса с инициализацией другого класса - C++
error C2064: term does not evaluate to a function taking 6 arguments Так же при наведении на SStria(...); Пишет: call of an object of...

6
User409368
191 / 168 / 6
Регистрация: 09.09.2013
Сообщений: 524
14.12.2013, 19:45 #2
Цитата Сообщение от TyLinka Посмотреть сообщение
выдаются ошибки LNK2028, LNK2019 и LNK1120.
очень интересные сообщения об ошибках. что же они означают?
0
TyLinka
32 / 32 / 11
Регистрация: 02.02.2012
Сообщений: 177
14.12.2013, 19:50  [ТС] #3
Проблемы с кодировкой, могу только догадываться...
Но я заметила, что если конструктор описывать внутри класса, то всё нормально.
Но, во-первых, мне надо, чтобы он был описан вне класса,
а во-вторых, даже если описать его внутри класса, а потом попробовать вывести значение K с помощью get_K, то будут аналогичные ошибки
Я банально даже не могу вот это скомпилировать, с вышеизложенными классами:
C++
1
2
3
4
5
6
7
8
int main()
{
    planet p;
    p.init_sphere(6e24, 6300e3);
    cout << p.get_PI() << endl;
    system("pause");
    return 0;
}
0
User409368
191 / 168 / 6
Регистрация: 09.09.2013
Сообщений: 524
14.12.2013, 19:58 #4
TyLinka, не хватает функций p.init_sphere() и p.get_PI()

у них только прототипы есть внутри класса. больше ничего
1
TyLinka
32 / 32 / 11
Регистрация: 02.02.2012
Сообщений: 177
14.12.2013, 20:14  [ТС] #5
Спасибо, идиотская ошибка
0
kravam
быдлокодер
1697 / 884 / 45
Регистрация: 04.06.2008
Сообщений: 5,484
14.12.2013, 20:29 #6
TyLinka, при чём тут конструкторы? Разбирайся последовательно. Мой компилятор говорит, что в классе нельзя так объявлять поля, как у тебя определены.

C++
1
2
const double PI = 3.14159265358979323846; 
const double G = 6.67384e-11;
А надо так (два варианта инициализации полей класса минуя конструктор)


C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#include <iostream>
#include <windows.h>
using namespace std;
 
 
class sphere
{
protected:
    double M; // масса 
    double R;
    static double PI; // число пи
public:
    void init_sphere(double m, double r);
    double get_M();
    double get_R();
    double get_PI();
};
 
///////////////////////////////////////
 
class planet : public sphere
{
private:
    static const double G = 6.67384e-11;
    double K; // гравитационный параметр
public:
    planet();
    double get_G();
    double get_K();
};
 
planet::planet()
{
    K = G*M;
}
 
///////////////////////////////////////
 
double sphere::PI = 3.14159265358979323846;
 
///////////////////////////////////////
 
int main()
{
    planet p;
    //p.init_sphere(6e24, 6300e3);
    //cout << p.get_PI() << endl;
    system("pause");
    return 0;
}
Теперь добавь определения функций init_sphere() и get_PI() и всё будет круто
0
TyLinka
32 / 32 / 11
Регистрация: 02.02.2012
Сообщений: 177
15.12.2013, 08:58  [ТС] #7
А какой у вас компилятор?
VS ругается на это:
C++
1
static const double G = 6.67384e-11;
static нецелочисленный у меня только вне класса норм инициализируется

А к
C++
1
2
const double PI = 3.14159265358979323846; 
const double G = 6.67384e-11;
не выдавал никаких претензий
0
15.12.2013, 08:58
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.12.2013, 08:58
Привет! Вот еще темы с ответами:

Конструктор класса - C++
class NMClient{ public: NMClient(string IPServer, int Port); NMClient(string IPServer, int Port) { /*_Running =...

Конструктор класса - C++
Для чего используется второй конструктор, если при объявлении полей класса и так указывается их тип? class fraction { ...

Конструктор класса - C++
Интересно, а может ли быть конструктор класса не публичнымм, а приватным?

Конструктор класса - C++
Имеется: class block{ public: block(int, int); private: int CoordX; int CoordY; }; block::block(int X, int Y){ CoordX =...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru