非标准语法;请使用 "&" 来创建指向成员的指针
时间: 2023-04-25 16:02:05 浏览: 231
非标准语法指的是不符合语言规范或者不被官方认可的语法。在编程中,使用非标准语法可能会导致代码不可移植或者不稳定。
使用 "&" 来创建指向成员的指针是一种常见的编程技巧,它可以让我们方便地访问结构体或者类的成员变量。例如,如果有一个结构体定义如下:
struct Person {
char name[20];
int age;
};
我们可以使用如下语句来创建指向 age 成员的指针:
int *pAge = &person.age;
这样,我们就可以通过 pAge 指针来访问 age 成员变量了。需要注意的是,这种方法只适用于结构体或者类的成员变量,不能用于普通变量。
相关问题
QMap<int,QString>::size”: 非标准语法;请使用 "&" 来创建指向成员的指针
编译器提示这个错误的原因是,你在访问 QMap 对象中的 size() 方法时,使用了非标准语法。正确的语法是使用 "&" 符号来创建指向成员的指针。具体实现方法如下:
```cpp
#include <QMap>
#include <QString>
int main() {
// 创建 QMap 对象
QMap<int, QString> map;
// 插入元素
map.insert(1, "apple");
map.insert(2, "banana");
map.insert(3, "orange");
// 访问元素
QString fruit = map.value(1); // fruit 的值为 "apple"
// 输出 QMap 大小
qDebug() << "QMap size: " << &QMap<int, QString>::size;
return 0;
}
```
在上述代码中,我们创建了一个 QMap 对象,并使用 insert() 方法向其中插入三个元素。我们可以使用 value() 方法来访问某个键对应的值。在输出 QMap 大小时,我们使用了 & 符号来创建指向 QMap 类中 size() 方法的指针,并将其传递给 qDebug() 函数输出。这样就可以避免编译器提示的非标准语法错误了。
错误 C3867 “Imref::YImageSpacing”: 非标准语法;请使用 "&" 来创建指向成员的指针
这个错误是因为你在使用成员函数时没有使用成员函数指针的正确语法。你需要使用 "&" 来获取成员函数的指针,然后再将其传递给需要使用它的函数。
例如,如果你想将一个成员函数指针传递给另一个函数,你可以这样做:
```cpp
class MyClass {
public:
float YImageSpacing() const {
return m_yImageSpacing;
}
private:
float m_yImageSpacing;
};
void SomeFunction(float (MyClass::*getYImageSpacing)() const) {
MyClass obj;
float ySpacing = (obj.*getYImageSpacing)();
// do something with ySpacing
}
int main() {
SomeFunction(&MyClass::YImageSpacing);
return 0;
}
```
在这个例子中,你首先定义了一个成员函数 `YImageSpacing()`,然后在 `SomeFunction()` 中使用了成员函数指针参数 `getYImageSpacing`。在 `main()` 中,你将 `&MyClass::YImageSpacing` 作为参数传递给 `SomeFunction()`,这相当于传递了 `MyClass` 的成员函数 `YImageSpacing()` 的指针。
注意,使用成员函数指针时,你需要使用 `.*` 或 `->*` 运算符来调用成员函数,这取决于你是在对象上还是在指向对象的指针上调用成员函数。在上面的例子中,`obj.*getYImageSpacing()` 表示在 `obj` 对象上调用 `getYImageSpacing` 所指向的成员函数。