C ++ Visual Studio“非标准语法;使用'&'创建指向成员的指针”[关闭]
Posted
技术标签:
【中文标题】C ++ Visual Studio“非标准语法;使用\'&\'创建指向成员的指针”[关闭]【英文标题】:C++ Visual Studio "Non-standard syntax; use '&' to create a pointer to member" [closed]C ++ Visual Studio“非标准语法;使用'&'创建指向成员的指针”[关闭] 【发布时间】:2017-10-20 08:52:56 【问题描述】:我多次遇到此错误(错误 C3867:非标准语法;使用“&”创建指向成员的指针)。我知道这个问题已经被问过很多次了,但我不明白为什么会出现这个问题以及我能做些什么来解决它。我已经阅读了很多关于指针如何工作的指南,并且我尝试过学习新知识,但我不知道如何正确地做到这一点。
对于这个问题,我做了一个简单的代码。谁能帮我理解为什么会出现这个错误以及如何修复这个代码?
错误: 错误 C3867:'BankAccount::amountOfMoney':非标准语法;使用 '&' 创建指向成员的指针
Source.cpp
#include <iostream>
#include <string>
#include "BankAccount.h"
using namespace std;
int main()
BankAccount bankAccount1("testName", 200.0);
cout << bankAccount1.amountOfMoney << endl;
BankAccount.h
#pragma once
#include <string>
using namespace std;
class BankAccount
public:
BankAccount();
BankAccount(string name, double money);
~BankAccount();
double amountOfMoney();
private:
string name;
double money;
;
BankAccount.cpp
#include "BankAccount.h"
BankAccount::BankAccount()
BankAccount::BankAccount(string n, double m)
name = n;
BankAccount::~BankAccount()
double BankAccount::amountOfMoney()
return money;
【问题讨论】:
你需要回顾一下如何调用一个方法amountOfMoney
是一个函数,所以你必须使用()
来调用它。否则编译器认为你想要函数的 address。 cout << bankAccount1.amountOfMoney() << endl;
【参考方案1】:
您忘记了函数调用运算符()
。将您的 main
代码更改为:
int main()
BankAccount bankAccount1("testName", 200.0);
cout << bankAccount1.amountOfMoney() << endl;
如果没有括号,它会尝试打印成员函数的地址,除非该函数不是类的成员,否则它无法做到这一点。
【讨论】:
这是我尝试执行“-9.25596e+61”时的输出。它不应该返回双“钱”的价值吗? @Kasper - 那么money
的值是多少?你没有在构造函数中设置一个值...... (顺便说一句,从一个真正为银行工作的人那里,当你开一个新账户时,它永远不会有任何钱。你必须做一个存款。:-)
@Kasper 它完全按照您的描述进行:返回 money
的值。您从未初始化双精度,因此它将获得一个“未初始化”值,(至少在 Windows 上)通常看起来像 0xCCCC CCCC CCCC CCCD
(64 位)。因此-9.25596e+61
.
啊,当然!我完全忘了从构造函数中设置值。感谢你们所有人解释它是如何工作的:)【参考方案2】:
如果你想调用你的成员函数,请使用括号。:
cout << bankAccount1.amountOfMoney() << endl;
【讨论】:
第二个选项错误。您无法获得指向amountOfMoney
的简单指针。它是一个成员函数,不能生成指向成员函数的简单指针。你可以生成一个“指向成员函数的指针”但这不是一个指针(语法是&BankAccount::amountOfMoney
)。
我会在它被否决之前删除这个答案。
第二个选项只会打印'1',因为语法将更改为&BankAccount::amountOfMoney
奇怪 - 我的本地编译器 (CYGWIN 6.4.0) 允许,但 Godbolt 不允许。好的,我将删除第二个选项并重新输入。编辑:这是允许它的 -fpermissive 选项。以上是关于C ++ Visual Studio“非标准语法;使用'&'创建指向成员的指针”[关闭]的主要内容,如果未能解决你的问题,请参考以下文章
C++ Visual Studio 非标准语法使用 '&' 创建指向成员的指针
visual studio C/C++ 编程学习 visual studio 中的生成事件