尝试向迭代器中添加常量时链接器错误

Linker error when trying to add constant to iterator

本文关键字:链接 错误 常量 添加 迭代器      更新时间:2023-10-16
#include <string>
#include <iostream>
using namespace std;
struct foo {
    static const int X = 3;
    static char bar(const string &str) {
        // return str[X]; // this works
        return *(str.begin() + X); // this fails
    }
};
int main() {
    cout << foo::bar("abcdefg") << endl;
}

当编译这个时,我得到一个链接器错误说"未定义的符号foo::X"。如果前一行没有注释,则编译。这两者有什么不同呢?

除了声明foo::X之外,还需要定义它。在foo之外做

const int foo::X;