2012-02-18 443 views
5

私はC++クラスの宿題に取り組んでおり、私が間違っていることが分かりません。バインドされた関数へのポインタは、関数を呼び出すためにのみ使用することができます

ファイルの区切りが必要であり、mainの内部に構造AttackStylesを作成して、追加のクラスファイルを完全に削除した場合、これがはるかに簡単になることがわかります。

私の問題の根本は、クラスの配列をループして基本データを引き出すことができないように思えることです。ここでは、コードです:ptrAsa->getStyleIdptrAsa->getStyleNameの両方で

"a pointer to a bound function may only be used to call the function" 

を:私はエラーを取得するなぜ

// AttackStyles.h 
#ifndef ATTACKSTYLES_H 
#define ATTACKSTYLES_H 
#include <iostream> 
#include <string> 

using namespace std; 

class AttackStyles 
{ 
private: 
    int styleId; 
    string styleName; 

public: 
    // Constructors 
    AttackStyles(); // default 
    AttackStyles(int, string); 

    // Destructor 
    ~AttackStyles(); 

    // Mutators 
    void setStyleId(int); 
    void setStyleName(string); 

    // Accessors 
    int getStyleId(); 
    string getStyleName(); 

    // Functions 

}; 
#endif 


///////////////////////////////////////////////////////// 
// AttackStyles.cpp 
#include <iostream> 
#include <string> 
#include "AttackStyles.h" 
using namespace std; 


// Default Constructor 
AttackStyles::AttackStyles()  
{} 

// Overloaded Constructor 
AttackStyles::AttackStyles(int i, string n) 
{ 
    setStyleId(i); 
    setStyleName(n); 
} 

// Destructor 
AttackStyles::~AttackStyles()  
{} 

// Mutator 
void AttackStyles::setStyleId(int i) 
{ 
    styleId = i; 
} 

void AttackStyles::setStyleName(string n) 
{ 
    styleName = n; 
} 

// Accessors 
int AttackStyles::getStyleId() 
{ 
    return styleId; 
} 

string AttackStyles::getStyleName() 
{ 
    return styleName; 
} 


////////////////////////////////////////////// 
// main.cpp 
#include <cstdlib> 
#include <iostream> 
#include <string> 
#include "attackStyles.h" 

using namespace std; 

int main() 
{ 
    const int STYLE_COUNT = 3; 
    AttackStyles asa[STYLE_COUNT] = {AttackStyles(1, "First"), 
            AttackStyles(2, "Second"), 
            AttackStyles(3, "Third")}; 

    // Pointer for the array 
    AttackStyles *ptrAsa = asa; 

    for (int i = 0; i <= 2; i++) 
    { 
     cout << "Style Id:\t" << ptrAsa->getStyleId << endl; 
     cout << "Style Name:\t" << ptrAsa->getStyleName << endl; 
     ptrAsa++; 
    } 

    system("PAUSE"); 
    return EXIT_SUCCESS; 
} 

私の質問はありますか?

私は何が間違っているのか分かりません!

答えて

15

関数呼び出しの回りに()がありません。それはptrAsa->getStyleId()でなければなりません。あなたは両方の呼び出しに括弧が欠落している

+1

OMGを!今私は本当に馬鹿だと感じる。みんなありがとう! – Kardsen

6

、それは関数を呼び出すために

ptrAsa->getStyleId() 

でなければなりません。

ptrAsa->getStyleId 

は、メンバー値/属性を参照するために使用されます。あなたが関数を呼び出すために必要

+0

OMG!私はちょうど私の穴に今戻ってクロールするつもりです。 愚かな質問の笑に非常に残念。 – Kardsen

+0

私たちすべてに起こる=) –

2

、単にそれを参照しない:

std::cout << "Style Id:\t" << ptrAsa->getStyleId() << "\n"; 
    std::cout << "Style Name:\t" << ptrAsa->getStyleName() << "\n"; 
関連する問題