当尝试使用静态ifstream成员和附带的函数时,我得到一个链接器错误

When trying to use a static ifstream member and accompanying function, I get a linker error

本文关键字:错误 链接 一个 函数 静态 ifstream 成员      更新时间:2023-10-16

假设在.o文件中发现了错误,那么这是链接器的问题…

不管怎样,我正在写一个程序来组织我想在大学里上的课程,把它们输出到一个格式很好的HTML文件中。为此,我将把我的Course类的一堆对象放入一个列表中(我选择的数据结构,除非有人另有警告),按课程代码组织它们,并将它们输出到前面提到的HTML文件中,在每个不同的major/minor/etc之间放置水平线分隔符。在每个换行段的顶部将是主要的名称,读作;

AMS(应用数学与统计)

每当用户输入课程代码(只有三个字母,而不是数字)时,我希望检查代码是否在我随程序提供的.txt文件中。因为如果我最终要有几十个Courses,为什么要用fstream或每个对象的成员函数来膨胀我的代码呢?所以我想使用一些static魔法可能是个好主意。然后我得到这个错误信息,使用g++;

(对不起,它看起来很乱,顺便说一下,我不知道如何在这里整齐地格式化。)

在函数' std::basic_ifstream>::open(char const*, std::_Ios_Openmode)':

/usr/include/c++/4.5/fstream| 528 |未定义的Course::courses' /usr/include/c++/4.5/fstream|533|undefined reference to Course::courses/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 Course::courses' follow

然后我被定向到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类来处理实际输出的所有内容),但我甚至没有提到这些流相关的成员在他们中的任何一个,但我明显的WIP main.cpp;

int main()
{
    cout << "Welcome to the Stony Brook Course Organizer!  This program will help youn"
            "organize the courses that you wish to take at Stony Brook University.nn";
    Course thefirst;
    Course::openCodeList();
    thefirst.setup();
    thefirst.confirm();
    Course::closeCodeList();
}

任何帮助在处理我的static问题和建议的未来(即使不是直接相关的)将非常感激。谢谢你!

您需要在程序的源文件中,在类定义之外定义静态成员。

。在。cpp中:

std::ifstream Course::courses;
相关文章: