I'm actually trying to do this in objective c, but I belive the theory probarbly are the same for C++.
Heres an example of what I want to do with a simple, working, example using an integer:

void func2(int *i) {
    *i = 2;
}

void func1() {
    int i = 1;
    func2(&i)
    // i now equals 2
}

I want to be able to do this with an objec aswell, but when I try with the example under I get the following warning: "Passing argument from incompatible pointer type".

void func2((NSScanner *)aScanner) {
    //aScanner is used and updated here.
}

void func1 {
    NSScanner *aScanner = initiate new Scanner-object.
    
    [func2 &aScanner];

    // Changes done in func2 to the scanner object also applies here
}

I know I would achieve this with a global variable, but from what I understand it's preferred to avoid them when possible.
So anyone who can help me understand why this doesn't work and how to do it properly?

Edited 6 Years Ago by siggivara: Bad topic title

I'm not familiar with the objective-c syntax, but in C++ it would be something like

void func2(NSScanner * myNSScanner)
{
   //yada
}

void func1()
{
   NSScanner * aScanner = new NSScanner(); //or your parameters 
   func2(aScanner);  

}

It's different from the integer example because your aScanner is already a pointer

(You could also pass around a reference to your object (using the & operator instead of * in func2 -- just pass in a NSScanner object to the function directly you won't need the pointer))

Edited 6 Years Ago by jonsca: n/a

Thanks, you helped me figure it out.
I had to use one of these two methods, both work:

-(void) test2:(NSScanner **)aScanner) {
    // Using the & operator instead of *
    [&aScanner setScanLocation:20];
}

-(void) test1 {
    NSScanner *aScanner = initiate new Scanner-object.
    
    [test2 &aScanner];

     // Changes done in func2 to the scanner object also applies here
}
-(void) test2:(NSScanner *)aScanner {
    // No need to use & or * here
    [aScanner setScanLocation:20];
}

-(void) test1 {
    NSScanner *aScanner = initierer ny scannerobjekt her.
    
    [test2 aScanner];

     // Changes done in func2 to the scanner object also applies here
}
This question has already been answered. Start a new discussion instead.