Указатели при работе с файлами. Проблема с объектами пользовательского класса

104
11 февраля 2022, 13:30

По этому коду я уже задавал вопрос. Возникли новые ошибки. Я просто не понимаю, что и как мне нужно исправить...

Пытаюсь создать класс, в котором будут описаны методы для работы с текстовыми файлами: чтение, редактирование, запись и так далее.

Так как методы этого класса хочу использовать в последующих проектах, то делаю это с использованием заголовочных файлов.

Листинг хиддера MyClasses.h

#ifndef MYCLASSES_H_INCLUDED
#define MYCLASSES_H_INCLUDED
#include <fstream>
using namespace:: std;
class MyClass{
private:
    int string_size=0;      
    char input_symbol=0;    
public:
    int check_line_float(ifstream*);
};
#endif // MYCLASSES_H_INCLUDED

Листинг источника к хиддеру MyClasses.cpp

#include <fstream>
#include <iostream>
#include "MyClasses.h"
using namespace::std;
int check_line_float(ifstream *input_file){
     int string_size = 0;   
     int error_cnt = 0;
     char input_symbol=0; 
     if(!input_file->is_open()){
       cout << "Cant open file" << endl;
    }else{
        while(*input_file>>noskipws>>input_symbol){
            if (input_symbol != '0' &&
                input_symbol != '1' &&
                input_symbol != '2' &&
                input_symbol != '3' &&
                input_symbol != '4' &&
                input_symbol != '5' &&
                input_symbol != '6' &&
                input_symbol != '7' &&
                input_symbol != '8' &&
                input_symbol != '9' &&
                input_symbol != '.' &&
                input_symbol != 32  &&
                input_symbol != 2   &&
                input_symbol != '-'){
                    error_cnt++;
                    cout << "Incorrect input numeric format. Some unknown symbol is detected" << endl;
                    cout << input_symbol << endl;
                    return -1;
                }
                string_size++;
            }
            cout << "Everething is ok" << endl;
            return 0;
        }
 };

Листинг основной программы The_Matrix.cpp

#include <fstream>
#include <iostream>
#include "MyClasses.h"

using namespace::std;
int main(){
    MyClass MyObject;
    ifstream input_file("The_Matrix.txt");
    cout<<MyObject.check_line_float(&input_file);
return 0;
}

Информация с окна ошибок

=== Build: Debug in The_Matrix (compiler: GNU GCC Compiler) ===|
...\MyClasses.h|11|warning: non-static data member initializers only available with -std=c++11 or -std=gnu++11|
...\MyClasses.h|13|warning: non-static data member initializers only available with -std=c++11 or -std=gnu++11|
...\MyClasses.cpp||In function 'int check_line_float(std::ifstream*)':|
...\MyClasses.cpp|59|warning: control reaches end of non-void function [-Wreturn-type]|
obj\Debug\The_Matrix.o||In function `main':|
...\The_Matrix.cpp|15|undefined reference to `MyClass::check_line_float(std::basic_ifstream<char, std::char_traits<char|
error: ld returned 1 exit status|
=== Build failed: 2 error(s), 3 warning(s) (0 minute(s), 15 second(s)) ===|
Answer 1

Предупреждения: 1 и 2 - инициализируются нестатичные поля класса в описании класса; 3 - в методе int check_line_float(ifstream *input_file) в первом блоке ветвления (if(!input_file->is_open())) нет return или throw, - не стоит так делать (методу с возвращаемым типом следует что-то вернуть или бросить исключение).

Ошибка: Ошибка линковки, линковщик не смог найти метод-член класса MyClass::check_line_float(ifstream *input_file). Вы вызываете метод, который объявлен, но не определен. В файле MyClasses.cpp реализован какой-то метод check_line_float, который не является членом какого-либо класса. Чтобы реализовать объявленный метод класса, нужно сделать это через оператор разрешения области видимости "::", вот так:

//...
int MyClass::check_line_float(ifstream *input_file)
{
    // do smth
}
//...

MyClass:: означает, что вы имеете ввиду именно этот метод-член класса.

READ ALSO
LoadLibrary бросает исключение

LoadLibrary бросает исключение

Пишу свойdll файл, при импорте функций из библиотеки функция LoadLibrary выкидывает исключение о нарушении прав доступа при чтении

72
Как задать свой путь к dll-файлу?

Как задать свой путь к dll-файлу?

Программа зависит от двух dll-ок, и чтобы не пихать все вместе, я хочу положить их в папку dlls, напримерЧто нужно сделать, чтобы программа работала...

100
Как переделать этот код под динамическую память?

Как переделать этот код под динамическую память?

Даны натуральное число n и целочисленная матрица [aij]i,j=1,

69
Нужна помощь с реализацией алгоритма Габова для нахождения кратчайших путей с помощью масштабирования

Нужна помощь с реализацией алгоритма Габова для нахождения кратчайших путей с помощью масштабирования

Нужна помощь с написанием программы на С++, а именно алгоритма Габова нахождения кратчайших путей с помощью масштабированияВся сложность...

109