当尝试使用静态ifstream成员和附带的函数时,我得到一个链接器错误
When trying to use a static ifstream member and accompanying function, I get a linker error
假设在.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;
- Netbeans 10:错误:链接器命令失败,退出代码为 1(使用 -v 查看调用)
- CMake 错误:链接器命令失败,退出代码为 1 和 cpp.o 文件
- clang:错误:链接器命令失败,退出代码为 1(使用 -v 查看调用) - 体系结构的未定义符号 x86_64:
- 如何修复 clang: 错误:链接器命令失败,退出代码为 1(使用 -v 查看调用)
- Android NDK.Build命令失败.未定义的引用.clang++:错误:链接器命令失败,退出代码为1
- 使用cmake错误链接boost日志
- 错误:链接器命令失败,退出代码为 1(使用 -v 查看调用):在 Macbook 上
- C++ XCODE ld:找不到体系结构x86_64 clang 的符号:错误:链接器命令失败,退出代码为 1(使用 -
- clang:错误:链接器命令失败,C++代码中的退出代码为 1(使用 -v 查看调用)
- 静态库中的 g++ 错误链接函数
- 未定义的参考错误链接天然函数Android
- C++编译错误:ld:找不到体系结构x86_64 clang 的符号:错误:链接器命令失败,退出代码为 1(使用 -v
- QT Q_PROPERTY错误:链接器命令失败,退出代码为 1(使用 -v 查看调用)
- ld:找不到体系结构x86_64 clang 的符号:错误:链接器命令失败,退出代码为 1(使用 -v 查看调用)
- OSX MOJAVE -LD:架构X86_64 clang找不到符号:错误:链接器命令失败,出口代码1
- C 错误链接器命令失败了出口代码1(使用-V查看调用)
- LD:架构x86_64 clang找不到符号:错误:链接器命令失败,出口代码1(使用-v to See
- 聚输出错误 - 链接列表
- Xcode链接器错误:链接器命令失败,退出代码为1(使用-v查看调用)
- 尝试构建C DLIB示例无法与数百个未定义的参考错误链接