#c #class #visual-studio-code
#c #класс #visual-studio-code
Вопрос:
Я новичок в vs code, после того, как ранее немного использовал atom. Я работаю на c с программой, в которой есть несколько классов в отдельных файлах. Я уже установил расширение c / c , но столкнулся с проблемой. Когда я пытаюсь запустить программу со всеми включенными в нее файлами, она показывает мне следующую ошибку:
main.cpp :(.text 0x1f): неопределенная ссылка на `Car:: sayHello ()’ collect2: ошибка: ld вернул 1 статус выхода. код довольно простой.
#include <iostream>
#include "Car.h"
using namespace std;
int main(){
Car c;
c.sayHello();
cout << "Hello world";
return 0;
}
Из того, что я помню из atom, выбор всех файлов и их запуск решат проблему, которая, я думаю, такая же, как выполнение следующей команды в терминале:
g Car.cpp Car.h main.cpp -o Classes
Я пробовал это в vs code, и проблема, похоже, появляется снова. Помощь очень ценится.
Комментарии:
1. Попробуйте ввести
main.cpp
beforeCar.cpp
в командной строке compile / link. И не помещайтеCar.h
туда.
Ответ №1:
Так что, если у кого-то еще может возникнуть такая же проблема, как у меня в будущем. Проблема заключалась в том, что я объявил конструктор и деструктор в заголовочном файле, но я не определил их в файле .cpp, после этого программа, похоже, работает хорошо. Также, как упоминал Фред, Car.h является избыточным для упоминания в процессе компиляции, но в любом случае программа будет успешно скомпилирована, даже если она используется.
Ответ №2:
Итак, у меня была та же проблема, но я понял это благодаря этой ссылке. Следуйте инструкциям и протестируйте его, и он должен работать. Существуют и другие способы решения этой проблемы, основанные на ваших предпочтениях, которые показаны на этом веб-сайте. Однако я заметил, что как только вы добавляете несколько папок в свою рабочую область, компиляция любого main.exe файл, который вам нужен, становится сложным, поскольку вы используете arg ${workspaceFolder}\*.cpp
для компиляции всех cpp-файлов в папке рабочей области. Один из способов решить эту проблему — создать несколько рабочих пространств, но если кто-нибудь знает более эффективный способ сделать это, пожалуйста, дайте мне знать.