2017-10-20 102 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

相關問題