Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/134.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 尝试将常量添加到迭代器时发生链接器错误 #包括 #包括 使用名称空间std; 结构foo{ 静态常数int X=3; 静态字符栏(常量字符串和str){ //return str[X];//这是有效的 return*(str.begin()+X);//此操作失败 } }; int main(){ 除了声明它之外,您还需要定义foo::X。在foo之外进行定义 #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; }_C++ - Fatal编程技术网

C++ 尝试将常量添加到迭代器时发生链接器错误 #包括 #包括 使用名称空间std; 结构foo{ 静态常数int X=3; 静态字符栏(常量字符串和str){ //return str[X];//这是有效的 return*(str.begin()+X);//此操作失败 } }; int main(){ 除了声明它之外,您还需要定义foo::X。在foo之外进行定义 #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; }

C++ 尝试将常量添加到迭代器时发生链接器错误 #包括 #包括 使用名称空间std; 结构foo{ 静态常数int X=3; 静态字符栏(常量字符串和str){ //return str[X];//这是有效的 return*(str.begin()+X);//此操作失败 } }; int main(){ 除了声明它之外,您还需要定义foo::X。在foo之外进行定义 #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; },c++,C++,除了声明它之外,还需要定义foo::X。在foo之外执行 #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.be

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

#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;
}

你的编译器是什么?代码对我有用。C++0x中允许内联定义吗?试着用
-std=C++0x
编译。Kerrek SB:实际上我是用-std=C++0x编译的,因为我在其余代码中使用了其他功能。你能试着把
X
的类型改为
std::string::iterator::distance\u type
?它可以吗应该不会有什么不同,但话说回来,你发布的代码对我来说很好。它对我来说适用于
gcc-O2
,而对
gcc-O0
,所以这取决于编译器是否优化了对X的引用。你的编译器是什么?代码对我来说很好。C++0x中允许内联定义吗?请尝试编译h
-std=c++0x
…Kerrek SB:实际上我是用-std=c++0x编译的,因为我在其余的代码中使用了其他功能。你能试着把
X
的类型改成
std::string::iterator::distance\u type
?这应该没什么区别,但是你发布的代码对我来说很好。它对我来说很有用h
gcc-O2
,而不是与
gcc-O0
,因此这取决于编译器是否优化了对X的引用。AFAIK静态整型常量成员可以在类声明本身内初始化。代码发布的代码在VS2008和ideone上运行良好(gcc 4.3.4)谢谢,但我想知道为什么
str[X]
即使没有外部定义也可以工作。@hrzap:您的代码可以与GCC 4.5.2和4.6.0、clang 2.9和ICC 11.1一起工作。如果静态数据成员是常量整型或常量枚举类型,则其在类定义中的声明可以指定常量初始值设定项,该初始值设定项应为整型常量表达式。在这种情况下,该成员可以ear在整型常量表达式中。如果在程序中使用该成员,则该成员仍应在名称空间范围中定义,并且名称空间范围定义不应包含初始值设定项。AFAIK静态整型常量成员可以在类声明本身中初始化。并且代码发布代码在VS2008和ideone上运行良好(gcc 4.3.4)谢谢你这么做,但我想知道为什么
str[X]
即使没有外部定义也可以工作。@hrzap:您的代码可以与GCC 4.5.2和4.6.0、clang 2.9和ICC 11.1一起工作。如果静态数据成员是常量整型或常量枚举类型,则其在类定义中的声明可以指定常量初始值设定项,该初始值设定项应为整型常量表达式。在这种情况下,该成员可以ear在整型常量表达式中。如果在程序中使用该成员,则该成员仍应在名称空间范围中定义,并且名称空间范围定义不应包含初始值设定项。