指向具有函数C ++的数据成员的指针

时间:2012-04-18 04:32:55

标签: c++ function object pointers member

#include "stdafx.h"
#include <iostream>
using namespace std;

class thing{
public:
    int stuff, stuff1, stuff2;

    void thingy(int stuff, int *stuff1){
        stuff2=stuff-*stuff1;
    }
}

int main(){
    thing t;
    int *ptr=t.stuff1;
    t.thingy(t.stuff, *ptr);
}

我一直在练习类和C ++中的指针。我正在尝试做的是通过将指针传递给stuff1的值来修改thing类中的stuff2数据成员。我该怎么做呢?

5 个答案:

答案 0 :(得分:2)

您正在创建一个指向类型指针的变量:如果您想要一个指向t.stuff1的指针,请将其地址设为:

int* ptr = &t.stuff1;
        ___^ here you are taking a reference (address)

然后,将该指针传递给您的thing::thingy方法:

t.thingy(t.stuff, ptr);
                __^ don't dereference the pointer, your function takes a pointer

答案 1 :(得分:0)

试试这个:

int *ptr;
*ptr = t.stuff1;

t.thingy( t.stuff, ptr);

答案 2 :(得分:0)

您应该传递地址:

*ptr = &(t.stuff1);

答案 3 :(得分:0)

我可能很晚才参加派对,但我想得到一些好的评论和测试

    //#include "stdafx.h"
    #include <iostream>
     using namespace std;

     //class declaration
     class thing{
        public:
            int stuff, stuff1, stuff2;
       thing(){//constructor to set default values
    stuff = stuff1 = stuff2 = 10;
        }


         void thingy(int param1, int *param2){
            stuff2=param1-*param2;
          }
        };

       //driver function
       int main(){
          thing t;//initialize class
      cout << t.stuff << ' ' << t.stuff1 << ' ' << t.stuff2 << endl;//confirm default values
          int *ptr= &t.stuff1;//set the ADDRESS (&) of stuff1 to an int pointer
      cout << *ptr << endl;
           t.thingy(t.stuff, ptr); //call function with pointer as variable
       cout << t.stuff1;
          }

答案 4 :(得分:0)

    int *ptr=t.stuff1;

你不能将int转换为int * t.stuff1是一个int值,而不是int的指针 试试这个:

    int *ptr=&t.stuff1;

你应该添加“;”在类的定义结束时,像这样:

    class Thing {
        ...
    };

当你调用t.thingy时,第二个参数是int * 但* ptr是一个int值,而不是指针。 ptr是一个指针,而不是* ptr。试试这个:

    t.thingy(t.stuff, ptr);
你应该知道:

    int i_value = 1;
    int* p_i = &i_value;
    int j_value = *p_i;

在这种情况下: i_value的类型j_value * p_i是int p_i的类型是int *