2012-02-18 1 views
5

Tôi đang làm bài tập về nhà cho lớp học C++ của mình và đã gặp phải vấn đề mà tôi không thể hiểu được mình đang làm gì sai.Chỉ có thể sử dụng con trỏ đến hàm bị ràng buộc để gọi hàm

Chỉ cần lưu ý, việc tách các tệp là cần thiết và tôi nhận ra điều này sẽ dễ dàng hơn nhiều nếu tôi chỉ tạo cấu trúc AttackStyles bên trong main và bỏ toàn bộ tệp lớp bổ sung.

Cơ sở của vấn đề của tôi là tôi dường như không thể lặp qua một mảng các lớp và rút ra dữ liệu cơ bản. Đây là mã:

// 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; 
} 

Câu hỏi của tôi là tại sao tôi nhận được lỗi:

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

trên cả ptrAsa->getStyleIdptrAsa->getStyleName?

Tôi không thể tìm ra điều gì sai với điều này!

Trả lời

15

Bạn đang thiếu () xung quanh các cuộc gọi chức năng. Nó phải là ptrAsa->getStyleId().

+1

omg! Bây giờ tôi cảm thấy thực sự câm. Cảm ơn các bạn! – Kardsen

6

Bạn đang thiếu ngoặc trên cả hai cuộc gọi, nó phải là

ptrAsa->getStyleId() 

để gọi hàm.

ptrAsa->getStyleId 

được sử dụng để tham chiếu đến giá trị/thuộc tính của thành viên.

+0

OMG! Bây giờ tôi sẽ bò vào lỗ của tôi. Vô cùng xin lỗi vì câu hỏi ngu ngốc lol. – Kardsen

+0

Xảy ra cho tất cả chúng ta =) –

2

Bạn cần phải gọi hàm, không chỉ đơn thuần là tham khảo nó:

std::cout << "Style Id:\t" << ptrAsa->getStyleId() << "\n"; 
    std::cout << "Style Name:\t" << ptrAsa->getStyleName() << "\n";