Pergunta

É possível devolver um objeto de um método estático em C ++ como existe em Java? Estou fazendo isso:

class MyMath {
    public:
       static MyObject calcSomething(void);
    private:
};

E eu quero fazer isso:

int main() { 
    MyObject o = MyMath.calcSomething(); // error happens here
}

Existem apenas métodos estáticos na aula de Mymath, então não faz sentido instantá -la. Mas eu recebo esse erro de compilação:

Mymath.cpp: 69: erro: expressão primária esperada antes '.' símbolo

O que estou fazendo errado? Eu tenho para instanciar o mymath? Eu preferiria não, se for possível.

Foi útil?

Solução

Usar :: ao invés de .

MyObject o = MyMath::calcSomething();

Quando você está chamando o método sem o objeto da classe, você deve usar :: notação. Você também pode chamar o método estático por meio de objetos de classe ou ponteiros para eles, neste caso você deve usar . ou -> notação:

MyObject obj;
MyObject* p = new MyObject();

MyObject::calcSomething();
obj.calcSomething();
p->calcSomething();

Outras dicas

O que estou fazendo errado?

Você está simplesmente usando sintaxe incorreta ... o :: operador (Operador de resolução de escopo) é como você acessa aulas ou membros em diferentes namespaces:

int main() { 
    MyObject o = MyMath::calcSomething(); // correct syntax
}

Eu tenho que instanciar o mymath?

Não.

Para este caso, você quer mymath :: calcsomething (). O '.' A sintaxe é para chamar funções em objetos. A sintaxe :: é para chamar funções em uma classe ou um espaço para nome.

Ligar MyMath::calcSomething()

Tente assim

#include <iostream>
using namespace std;
class MyMath {  
public:
    static MyMath* calcSomething(void);
private:
};
MyMath* MyMath::calcSomething()
{
    MyMath *myMathObject=new MyMath;
    return myMathObject;
}
int main()
{   
    MyMath *myMathObject=MyMath::calcSomething();
    /////Object created and returned from static function calcSomeThing   
}

Obrigado

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top