2017-10-20 91 views
0

我遇到了这个错误(错误C3867:非标准语法;使用'&'创建指向成员的指针) 一些时间。我知道这个问题已经问了很多次,但我不明白为什么会出现问题,我可以做些什么来解决问题。我已经阅读了很多关于指针如何工作的指南,并且我尝试了解新知识,但是我不知道如何正确执行。C++ Visual Studio“非标准语法;使用'&'创建指向成员的指针”

对于这个问题,我做了一个简单的代码。有人可以帮助我理解为什么会发生此错误,以及如何解决此代码?

错误:错误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; 
} 
+0

您需要查看如何调用方法 – user463035818

+3

'amountOfMoney'是一个函数,所以您必须使用'()'来调用它。否则,编译器认为你需要函数的*地址*。 'cout << bankAccount1.amountOfMoney()<< endl;' –

回答

3

你忘了函数调用操作符()。您main代码更改为:

int main(){ 

    BankAccount bankAccount1("testName", 200.0); 

    cout << bankAccount1.amountOfMoney() << endl; 

} 

没有它试图打印成员函数,它是无法做到的地址,除非函数不是类的成员括号。

+0

这是输出,当我试图做到“-9.25596e + 61”。它不应该返回双“钱”的价值吗? –

+2

@Kasper - 那么'money'的价值是什么?你不会在构造函数中设置一个值... *(顺便说一句,从一个实际为银行工作的人开始,当你开设一个新账户时,永远不会有任何资金,你必须存入资金。 : - )* –

+0

@Kasper它的确如你所描述的那样:返回'money'的值。你从来没有初始化这个double,所以它会得到一个“未初始化”的值,它至少在windows上看起来像是'0xCCCC CCCC CCCC CCCD'(64位)。因此'-9.25596e + 61'。 – Arrrow

0

如果你想打电话给你的成员函数,使用括号:

cout << bankAccount1.amountOfMoney() << endl; 
+1

第二个选项是**错误**。你不能得到一个简单的'amountOfMoney'指针。它是一个成员函数,并且不能生成一个指向成员函数的简单指针。您可以生成“指向成员函数”*,但不是指针*(语法为&BankAccount :: amountOfMoney)。 –

+0

我会在下调之前删除此答案。 –

+0

第二个选项只会打印'1',因为语法将更改为'&BankAccount :: amountOfMoney' – Arrrow

相关问题