Как инициализировать объект, объявленный как const в файле заголовка? - PullRequest
0 голосов
/ 04 августа 2020

Я хочу инициализировать объект std :: ifstream только в функции main() после объявления его в заголовке.

Есть ли способ сделать это на C ++?

Я написал это, но он не компилируется

//header.h
#include <iostream>
#include <fstream>

class class1{
        static const std::ifstream fs;
};

//proj.cpp
#include "header.h"

void main(){
        class1::fs("Employee.txt")
}

1 Ответ

0 голосов
/ 04 августа 2020

static переменные должны быть определены в глобальной области, а не внутри функции.

main также должно возвращать int не void.

A const std::ifstream не имеет особого смысла, поскольку большинство методов, которые вам нужно будет использовать, не являются const, поэтому их нельзя будет вызвать в вашем потоке const.

Исправление этих проблем дает:

//header.h
#include <iostream>
#include <fstream>

class class1{
        static std::ifstream fs;
};

//proj.cpp
std::ifstream class1::fs("Employee.txt");
int main(){
    return 0;
}

Если вы хотите открыть поток в main, то вам нужно сделать:

const std::ifstream class1::fs;
int main(){
    class1::fs.open("Employee.txt");
    return 0;
}
...