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是一个函数,所以你必须使用()来调用它。否则编译器认为你想要函数的 addresscout &lt;&lt; bankAccount1.amountOfMoney() &lt;&lt; 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 的简单指针。它是一个成员函数,不能生成指向成员函数的简单指针。你可以生成一个“指向成员函数的指针”但这不是一个指针(语法是&amp;BankAccount::amountOfMoney)。 我会在它被否决之前删除这个答案。 第二个选项只会打印'1',因为语法将更改为&amp;BankAccount::amountOfMoney 奇怪 - 我的本地编译器 (CYGWIN 6.4.0) 允许,但 Godbolt 不允许。好的,我将删除第二个选项并重新输入。编辑:这是允许它的 -fpermissive 选项。

以上是关于C ++ Visual Studio“非标准语法;使用'&'创建指向成员的指针”[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

C++ Visual Studio 非标准语法使用 '&' 创建指向成员的指针

visual studio 2010编译c的设置方法

visual studio code 怎么运行c语言

visual studio C/C++ 编程学习 visual studio 中的生成事件

哪些C语言函数在visual studio2015报错并怎么修改

visual studio编写的程序运行出现乱码