2 / 2 / 0
Регистрация: 13.11.2013
Сообщений: 41
|
||||||||||||||||||||||||||
1 | ||||||||||||||||||||||||||
Как создать объект класса? ПРоблемма из-за раздельной компиляции13.11.2013, 19:04. Показов 959. Ответов 17
Метки нет (Все метки)
Есть 4 файла
engine.h - базовый класс engine.cpp - реализация методов базового класса car.h - класс поизводный от engine car.cpp - реализация класа car main.cpp - функция main в main создаётся объект класса car car a; так не компилируется g++; если всё в одном файле, то всё проходит. engine.h
engine.cpp
car.h
car.cpp
main.cpp
Терминал
$ g++ engine.h car.h main.cpp
main.cpp: In function ‘int main()’: main.cpp:4:6: error: no matching function for call to ‘car::car()’ car a; ^ main.cpp:4:6: note: candidates are: car.h:10:5: note: car::car(short int, float, std::string, std::string, short int, double) car(short,float,string,string, short, double); ^ car.h:10:5: note: candidate expects 6 arguments, 0 provided car.h:2:7: note: car::car(const car&) class car : public engine ^ car.h:2:7: note: candidate expects 1 argument, 0 provided Подскажите, где накасячил? И как исправить. Спасибо.
0
|
13.11.2013, 19:04 | |
Ответы с готовыми решениями:
17
Создать функцию которая возводит число в квадрат, использовать принцип раздельной компиляции Как правильно использовать заголовочные файлы при раздельной компиляции в MS Visual Studio? Можно ли создать объект класса с таким же именем как у самого класса? Ошибка компиляции (преобразование объекта класса в объект другого класса) |
244 / 245 / 38
Регистрация: 08.04.2013
Сообщений: 927
|
|
13.11.2013, 19:08 | 2 |
это вызов конструктора по умолчанию, которого у Вас нету. На самом деле в этой строке написано car a();
0
|
503 / 352 / 94
Регистрация: 22.03.2011
Сообщений: 1,112
|
|
13.11.2013, 19:09 | 3 |
g++ engine.h car.h engine.cpp car.cpp main.cpp
0
|
2 / 2 / 0
Регистрация: 13.11.2013
Сообщений: 41
|
|
13.11.2013, 19:10 [ТС] | 4 |
Получается нужно все конструкторы писать?
Добавлено через 34 секунды Спасибо. Так и делал.
0
|
244 / 245 / 38
Регистрация: 08.04.2013
Сообщений: 927
|
|
13.11.2013, 19:12 | 5 |
allure, ну конструктор по умолчанию вообще лучше иметь.
Фразу "все конструкторы" не сильно понял) только те которые нужны) если вызываете конструктор по умолчанию, то понятно, что он нужен. Вы, конечно, можете вызвать конструктор,который у Вас там есть, тогда просто в скобках напишите необходимые параметры.
0
|
503 / 352 / 94
Регистрация: 22.03.2011
Сообщений: 1,112
|
|
13.11.2013, 19:12 | 6 |
Также про гварды не забываем.
1
|
2 / 2 / 0
Регистрация: 13.11.2013
Сообщений: 41
|
|
13.11.2013, 19:13 [ТС] | 7 |
А car a(); работает. А допустим car a (500) нет. Тоесть передавать либо всё, либо ничего?
0
|
244 / 245 / 38
Регистрация: 08.04.2013
Сообщений: 927
|
|
13.11.2013, 19:15 | 8 |
Можно указать в конструкторе значения по умолчанию. Тогда не все. А так да, все надо указывать
1
|
503 / 352 / 94
Регистрация: 22.03.2011
Сообщений: 1,112
|
||||||
13.11.2013, 19:17 | 9 | |||||
как понять работает?
Вообщето это
1
|
2 / 2 / 0
Регистрация: 13.11.2013
Сообщений: 41
|
|
13.11.2013, 19:17 [ТС] | 10 |
0
|
244 / 245 / 38
Регистрация: 08.04.2013
Сообщений: 927
|
|
13.11.2013, 19:19 | 11 |
stima, это он у меня взял я типа хотел показать, что там конструктор вызывается) надо было написать car a = car(); Так более понятно)
0
|
2 / 2 / 0
Регистрация: 13.11.2013
Сообщений: 41
|
|||||||||||
13.11.2013, 19:32 [ТС] | 12 | ||||||||||
Переписал конструкторы на:
0
|
244 / 245 / 38
Регистрация: 08.04.2013
Сообщений: 927
|
|
13.11.2013, 19:45 | 13 |
allure, на что ругается? Кст, не стоит использовать зарезервированные слова(в Вашем коде это pow). Может библиотека math у Вас и не подключена, но все же не стоит.
0
|
2 / 2 / 0
Регистрация: 13.11.2013
Сообщений: 41
|
|||||||||||
13.11.2013, 19:51 [ТС] | 14 | ||||||||||
о pow не подумал. спасибо
если main такое:
Терминал
main.cpp: In function ‘int main()’: main.cpp:4:11: error: no matching function for call to ‘car::car(int)’ car a(500); ^ main.cpp:4:11: note: candidates are: car.h:10:5: note: car::car(short int, float, std::string, std::string, short int, double) car(short,float,string,string, short, double); ^ car.h:10:5: note: candidate expects 6 arguments, 1 provided car.h:2:7: note: car::car(const car&) class car ublic engine ^ car.h:2:7: note: no known conversion for argument 1 from ‘int’ to ‘const car&’ если main такое:
Терминал
main.cpp: In function ‘int main()’:
main.cpp:4:11: error: no matching function for call to ‘car::car(int)’ car a(500); ^ main.cpp:4:11: note: candidates are: car.h:10:5: note: car::car(short int, float, std::string, std::string, short int, double) car(short,float,string,string, short, double); ^ car.h:10:5: note: candidate expects 6 arguments, 1 provided car.h:2:7: note: car::car(const car&) class car ublic engine ^ car.h:2:7: note: no known conversion for argument 1 from ‘int’ to ‘const car&’
0
|
244 / 245 / 38
Регистрация: 08.04.2013
Сообщений: 927
|
|
13.11.2013, 19:56 | 15 |
allure, не уверен, что в с++ short int и int это одно и то же, не смотря на то, что занимает одинаковое количество памяти. У Вас описан параметр как short int, а передаете int. Возможно в этом ошибка, но не уверен.
0
|
503 / 352 / 94
Регистрация: 22.03.2011
Сообщений: 1,112
|
|
13.11.2013, 20:04 | 16 |
2allure Почитайте, что такое конструктор по умолчани, перегруженный конструктор и как с этим все работать, просто видно, что Вы не совсем лавливаете суть о чем речь.
0
|
2 / 2 / 0
Регистрация: 13.11.2013
Сообщений: 41
|
|
13.11.2013, 20:07 [ТС] | 17 |
0
|
Неэпический
|
||||||
13.11.2013, 20:26 | 18 | |||||
Параметры по умолчанию в объявлении класса укажите:
1
|
13.11.2013, 20:26 | |
13.11.2013, 20:26 | |
Помогаю со студенческими работами здесь
18
Ошибки в раздельной компиляции Реализация раздельной компиляции Создать обЪект класса , у которого в параметрах конструктора объект этого же класса Порядок раздельной компиляции 3 файлов Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |