Если предположить, что если в файле .o обнаружена ошибка, то это проблема компоновщика ...
В любом случае, я пишу программу для организации курсов, которые я хочу пройти в колледже, путем вывода их в красиво отформатированный HTML-файл. Чтобы сделать это, я собираюсь выбросить кучу объектов моего класса Course в список (структуру данных, которую я выбрал, если кто-то не предупредит иначе), упорядочить их по коду курса и вывести их в вышеупомянутый HTML-файл, поместив разрывы горизонтальной линии между каждым основным / второстепенным / и т. д. В верхней части каждого сегмента с пунктирной линией будет название майора, читаемого как;
AMS (Прикладная математика и статистика)
Всякий раз, когда пользователь вводит код курса (только три буквы, а не число), я хочу, чтобы класс проверял, есть ли код в .txt, который я предоставляю программе. Потому что, если в конце концов я собираюсь получить десятки Courses
, зачем добавлять в мой код fstream
или функцию-член для каждого объекта? Поэтому я подумал, что использование магии static
может быть хорошей идеей. Затем я получаю это сообщение об ошибке, используя g ++;
(К сожалению, это выглядит грязно, кстати, я не уверен, как это аккуратно отформатировать здесь.)
В функции `std :: basic_ifstream> :: open (char const *, std :: _ Ios_Openmode) ':
/ USR / включать / C ++ / 4,5 / fstream | 528 | неопределенная ссылка на Course::courses'
/usr/include/c++/4.5/fstream|533|undefined reference to
курс :: курсы '
/usr/include/c++/4.5/fstream|533| неопределенная ссылка на Course::courses'
obj/Debug/main.o In function
std :: basic_filebuf> :: is_open () const ':
/ usr / include / c ++ / 4.5 / fstream | 223 | неопределенная ссылка на Course::courses'
obj/Debug/main.oIn function
std :: basic_ifstream> :: close () ':
/usr/include/c++/4.5/fstream|566| неопределенная ссылка на Course::courses'
obj/Debug/main.o:/usr/include/c++/4.5/fstream|529|more undefined references to
курс :: следование курсов
Затем я направляюсь в этот сегмент заголовка fstream;
void open(const char* __s, ios_base::openmode __mode = ios_base::in)
{
if (!_M_filebuf.open(__s, __mode | ios_base::in))
this->setstate(ios_base::failbit);
else
// _GLIBCXX_RESOLVE_LIB_DEFECTS
// 409. Closing an fstream should clear error state
this->clear();
}
Два статических члена, которые у меня есть (открыть и закрыть поток, в начале и конце всего процесса сбора для курсов), а также сам член объявлены так:
class Course
{
public:
Course();
void setup();
bool confirm();
stringstream entry;
static void openCodeList() { courses.open("codes"); if (!courses.is_open()) exit(1); }
static void closeCodeList() { courses.close(); }
private:
//Irrelevant strings and bits, etc, etc.
static ifstream courses;
}
У меня есть другие файлы .cpp и .h (а именно класс File, который обрабатывает фактически вывод всего в конце), но я даже не упомянул эти связанные с fstream члены ни в одном из них, кроме моего, очевидно, основного WIP. каст;
int main()
{
cout << "Welcome to the Stony Brook Course Organizer! This program will help you\n"
"organize the courses that you wish to take at Stony Brook University.\n\n";
Course thefirst;
Course::openCodeList();
thefirst.setup();
thefirst.confirm();
Course::closeCodeList();
}
Любая помощь в решении моих static
вопросов и советы на будущее (даже если это не имеет прямого отношения к этому) будет принята с благодарностью. Спасибо!