Problema com chamada de função

1. Problema com chamada de função

Cristiano Costa
blackmarik

(usa Ubuntu)

Enviado em 13/06/2011 - 22:26h

Boa noite galera, estou desenvolvendo um pequeno programa e me deparei com o seguinte warning que causa um "Ilegal Instruction" ao executar o programa:

main.cpp:75: warning: cannot pass objects of non-POD type ‘struct std::string’ through ‘...’; call will abort at runtime.

O trecho da chamada é o seguinte:

string argumentos[1];
argumentos[0] = "vortex.mensageiro";
printf("%s\n",execute_command("mysql_select", argumentos));

Sendo que o warning está sendo gerado na chamada da função "execute_command" este é seu protótipo:

string execute_command(string cmd, string* args);

Alguem poderia me dizer o que estou fazendo de errado na chamada da função?



  


2. Ajuda

Gilmar Mesquita Soares
gms81

(usa Ubuntu)

Enviado em 13/06/2011 - 22:36h

Boa noite,

Pelo que vi no código printf("%s\n",execute_command("mysql_select", argumentos));
voce acima cria um vetor na posição zero e adiciona uma String.
Por que voce não tenta falar no printf aonde esta o vetor?
printf("%s\n",execute_command("mysql_select", argumentos[0]));
Outra coisa, não sei se C tem a variavel String conforme voce esta utilizando,
JAVA tem, C seria mesmo char...
Espero ter ajudado!


3. Re: Problema com chamada de função

Cristiano Costa
blackmarik

(usa Ubuntu)

Enviado em 13/06/2011 - 23:15h

Olá, então, eu estou usando C++, e possui o tipo String.
O que acontece é que a variavel "argumentos" é passada para a função "execute_command", e não para o printf, ele só esta aí para imprimir o retorno da função, o importante é a chamada da função.
Obrigado por responder!


4. Re: Problema com chamada de função

Marcelo A. B. Slomp
mslomp

(usa Slackware)

Enviado em 14/06/2011 - 09:52h

aí é q está. printf é uma função da biblioteca padrão C e, desse modo, nunca foi adaptada para saída C++. vc está usando tipos C++ em uma função que, além de requerer como argumento valores pod (plain old data), ainda é uma função dita variadic (número variável de argumentos). uma cadeia de caracteres simples C é pod, ao passo que uma string C++ não o é. então, duas alternativas para contornar a situação são:
1 - transformar sua string C++ em uma "string" C, através de c_str() por exemplo
2 - utilizar saída C++ (cout)






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts