gpt4 book ai didi

c++ - C++ 中不允许使用 volatile + 对象组合?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:12:11 25 4
gpt4 key购买 nike

我正在为 TI TMS320F28335 使用嵌入式编译器,所以我不确定这是一个一般的 C++ 问题(手头没有运行 C++ 编译器)还是我的编译器。将以下代码片段放入我的代码中会出现编译错误:

"build\main.cpp", line 61: error #317: the object has cv-qualifiers that are not
compatible with the member function
object type is: volatile Foo::Bar

当我注释掉下面的 initWontWork() 函数时错误消失了。错误告诉我什么?我如何才能避免使用在 volatile struct 上运行的 static 函数?

struct Foo
{
struct Bar
{
int x;
void reset() { x = 0; }
static void doReset(volatile Bar& bar) { bar.x = 0; }
} bar;
volatile Bar& getBar() { return bar; }
//void initWontWork() { getBar().reset(); }
void init() { Bar::doReset(getBar()); }
} foo;

最佳答案

以同样的方式你不能这样做:

struct foo
{
void bar();
};

const foo f;
f.bar(); // error, non-const function with const object

你不能这样做:

struct baz
{
void qax();
};

volatile baz g;
g.qax(); // error, non-volatile function with volatile object

您必须对函数进行 cv 限定:

struct foo
{
void bar() const;
};

struct baz
{
void qax() volatile;
};

const foo f;
f.bar(); // okay

volatile baz g;
g.qax(); // okay

对你来说:

void reset() volatile { x = 0; }

关于c++ - C++ 中不允许使用 volatile + 对象组合?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3754933/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com