none
Sintaxe C++ RRS feed

  • Pergunta

  • Olá. Estou desenvolvendo uma DLL em C++ não gerenciado, e não consigo criar uma constante para a classe;

     

    O código é:

    class Colorimetria

    {

    public:

    static const double tmp[3][3] =

    {+0.5767309, +0.1855540, +0.1881852}, 

    {+0.2973769, +0.6273491, +0.0752741}, 

    {+0.0270343, +0.0706872, +0.9911085}};

    (...)

    }

    O erro está no sinal igual, "Error: data member initializer is not allowed". Mas então como vou definir constantes para a classe?

    Obrigado.

     

    • Movido AndreAlvesLima terça-feira, 26 de abril de 2011 13:04 (De:.NET Development - Geral)
    terça-feira, 26 de abril de 2011 12:42

Respostas

  • Segue um exemplo de uso do static :

    // static2.cpp
    // compile with: /EHsc
    #include <iostream>
    
    using namespace std;
    class CMyClass {
    public:
      static int m_i;
    };
    
    int CMyClass::m_i = 0;
    CMyClass myObject1;
    CMyClass myObject2;
    
    int main() {
      cout << myObject1.m_i << endl;
      cout << myObject2.m_i << endl;
    
      myObject1.m_i = 1;
      cout << myObject1.m_i << endl;
      cout << myObject2.m_i << endl;
    
      myObject2.m_i = 2;
      cout << myObject1.m_i << endl;
      cout << myObject2.m_i << endl;
    
      CMyClass::m_i = 3;
      cout << myObject1.m_i << endl;
      cout << myObject2.m_i << endl;
    }
    
    

     


    Heber da Silva Moreira ASP.NET Developer
    terça-feira, 26 de abril de 2011 13:51
  • Sem problemas Bruno, voce pode fazer isso no construtor da classe, ou voce pode usar const tambem (se o valor nao for mais alterado) como no exemplo abaixo :

    // constant_values1.cpp
    int main() {
      const int i = 5;
      i = 10;  // C3892
      i++;  // C2105
    }
    
    

     

    Abs


    Heber da Silva Moreira ASP.NET Developer
    terça-feira, 26 de abril de 2011 16:03

Todas as Respostas

  • Oi Bruno, tente tirar o const.

    Abs


    Heber da Silva Moreira ASP.NET Developer
    terça-feira, 26 de abril de 2011 13:00
  • Prezado(a),

    Estou migrando seu post para o fórum de C++.

    Por favor, das próximas vezes que tiver alguma dúvida relacionada a esse assunto, poste por lá.

    Obrigado pelo apoio.


    André Alves de Lima
    Microsoft MVP - Client App Dev
    Visite o meu site: http://www.andrealveslima.com.br
    Me siga no Twitter: @andrealveslima
    terça-feira, 26 de abril de 2011 13:03
  • O sinal de + antes dos valores eu acho que é desnecessário também.

    Abs 


    Heber da Silva Moreira ASP.NET Developer
    terça-feira, 26 de abril de 2011 13:06
  • Retirei o const e o static já, mas continua apresentando erros.


    Att,

    terça-feira, 26 de abril de 2011 13:35
  • Procurei pela categoria e não encontrei. Agora sei que fica no "Visual Studio", obrigado.
    terça-feira, 26 de abril de 2011 13:36
  • Sim, é desnecessário mas é comum utilizarmos valores negativos, então adotamos a política de colocar sinal para facilitar a leitura/compreensão do código. Além disso, o tamanho é fixo, então a identação fica perfeita.

     

    Att,

    terça-feira, 26 de abril de 2011 13:37
  • Se for necessário, posso colocar a classe toda (porém ainda não foi totalmente migrada para c++ não-gerenciado).
    terça-feira, 26 de abril de 2011 13:38
  • Acho que só precisa usar o static, p. ex. static int x = 0 seria valido.

    Abs


    Heber da Silva Moreira ASP.NET Developer
    terça-feira, 26 de abril de 2011 13:44
  • Segue um exemplo de uso do static :

    // static2.cpp
    // compile with: /EHsc
    #include <iostream>
    
    using namespace std;
    class CMyClass {
    public:
      static int m_i;
    };
    
    int CMyClass::m_i = 0;
    CMyClass myObject1;
    CMyClass myObject2;
    
    int main() {
      cout << myObject1.m_i << endl;
      cout << myObject2.m_i << endl;
    
      myObject1.m_i = 1;
      cout << myObject1.m_i << endl;
      cout << myObject2.m_i << endl;
    
      myObject2.m_i = 2;
      cout << myObject1.m_i << endl;
      cout << myObject2.m_i << endl;
    
      CMyClass::m_i = 3;
      cout << myObject1.m_i << endl;
      cout << myObject2.m_i << endl;
    }
    
    

     


    Heber da Silva Moreira ASP.NET Developer
    terça-feira, 26 de abril de 2011 13:51
  • Segui o exemplo e compilou, mas eu preciso que tmp seja iniciar com um determinado valor, já que esta não é uma classe executável. Ela apenas vai ser instânciada e seus métodos serão utilizados para fazer cálculos complexos.
    terça-feira, 26 de abril de 2011 14:34
  • Sem problemas Bruno, voce pode fazer isso no construtor da classe, ou voce pode usar const tambem (se o valor nao for mais alterado) como no exemplo abaixo :

    // constant_values1.cpp
    int main() {
      const int i = 5;
      i = 10;  // C3892
      i++;  // C2105
    }
    
    

     

    Abs


    Heber da Silva Moreira ASP.NET Developer
    terça-feira, 26 de abril de 2011 16:03
  • Exemplos de uso do construtor :

    http://msdn.microsoft.com/en-us/library/s16xw1a8(v=VS.90).aspx


    Heber da Silva Moreira ASP.NET Developer
    terça-feira, 26 de abril de 2011 16:04
  • Muito obrigado, consegui fazer um exemplo simples e agora estou modificando toda a classe. O problema é que no arquivo .h eu não posso inicializar as variáveis, mas no .cpp eu posso. Obrigado pela dedicação e paciência amigo!!!
    terça-feira, 26 de abril de 2011 17:54
  • Legal Bruno, obrigado pelo feedback !!
    Heber da Silva Moreira ASP.NET Developer
    terça-feira, 26 de abril de 2011 20:41