小编Pet*_*r K的帖子

GCC 4.9和clang 3.5中的std :: rbegin和std :: rend函数

我一直在MSVC 2013中使用std :: rbegin和std :: rend.当我尝试使用GCC 4.9.1或clang 3.5.0编译我的代码时,两者都告诉我'rbegin'和'rend'不属于命名空间'std'.

请参阅下面的代码示例.我做错了什么还是他们还没有在GCC和clang中实现?

// test.cpp

#include <vector>
#include <iostream>
#include <iterator>

int main(int, char**)
{
    std::vector<int> test = {1, 2, 3 ,4, 5};
    for (auto it = std::rbegin(test); it != std::rend(test); ++it) {
        std::cout << *it << ", ";
    }
    std::cout << std::endl;

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

GCC输出:

g++ --std=c++14 test.cpp -o test && ./test
test.cpp: In function ‘int main(int, char**)’:
test.cpp:10:20: error: ‘rbegin’ is not a member of ‘std’
     for (auto it = std::rbegin(test); …
Run Code Online (Sandbox Code Playgroud)

c++ gcc iterator clang c++14

6
推荐指数
1
解决办法
1305
查看次数

转换为派生类的ptr到ptr

如果我没有为Base**指定显式强制转换,为什么会出现编译错误?

处理派生类时,我可以使用指针指针吗?

class Base { };
class Child : public Base { };

void SomeFunction(Base** ppoObj) {}
void SomeFunction(Base* poObj) {}

int main()
{   
    Child *c = new Child();

    // This passed.
    SomeFunction(c);
    SomeFunction((Base**)&c);

    // CompilationError
    SomeFunction(&c);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

c++ inheritance pointers casting

5
推荐指数
1
解决办法
134
查看次数

将字符缓冲区转换为结构

我有一个包含, , , , ,的char缓冲区bufbuf[0] = 10buf[1] = 3buf[2] = 3buf[3] = 0buf[4] = 58

和一个结构:

typedef struct
{ 
    char type;
    int version;
    int length;
}Header;
Run Code Online (Sandbox Code Playgroud)

我想将 转换bufHeader. 现在我正在使用该功能

int getByte( unsigned char* buf)
{
    int number = buf[0]; 
    return number;
}

int getInt(unsigned char* buf)
{
    int number =  (buf[0]<<8)+buf[1];
    return number;
}

main()
{
    Header *head = new Header;
    int location = 0;

    head->type = getByte(&buf[location]); …
Run Code Online (Sandbox Code Playgroud)

c++ struct pointers type-conversion unsigned-char

2
推荐指数
1
解决办法
6244
查看次数