Ir ao conteúdo
  • Cadastre-se

C++ como resolver o erro "no match for 'operator" ?


igordinhow
Ir à solução Resolvido por Luís Roberto C. da Silva,

Posts recomendados

Eu estou fazendo um programa para cadastrar carros, só que eu me deparei com uns erros e não sei mais o que fazer.

 

 

#include <iostream>
#include <string>
using namespace std;
class carros {
    public:
        
        carro(string placa) {
        }
        void setPlaca (string x) { 
            int c;
            placa = x;
            cin >> c;
        }
        string getPlaca() {
            return placa;
        }
    private:
        string placa;
};
int main(int argc, char *argv[]) {
    carros placa1;
    int a;
    int b;
    int d;
    int e;
        cout << "Escolha uma opcao: \n "  "1- Adicionar informacao. \n"  " 2- Coletar informacao. \n";
            cin >> a;
            if ( a == 2){
                cout <<placa1.getPlaca;
            }
            if (a == 1){
                cout << "voce escolheu a opcao adicionar informacao: \n"  " 1- Adiciona placa. \n " "2- Adiciona carro. \n "  "3- Volta. \n";
                    cin >> b;
                        if (b == 1) {
                            cout << "Digite a placa: \n";
                                cin >> placa1.setPlaca ();
                        }
            }
    return 0;
}

os erros são:

29    10   [Error] no match for 'operator<<' (operand types are 'std::ostream {aka std::basic_ostream<char>}' and '<unresolved overloaded function type>')

36    33   [Error] no matching function for call to 'carros::setPlaca()'

 

como prosseguir?

Link para o comentário
Compartilhar em outros sites

  • Solução

Primeira coisa, remova esse carro(string placa) { };

cout <<placa1.getPlaca; tem que ter parênteses: cout << placa1.getPlaca();

Não pode direcionar o cin para uma função, lembre que a função tem argumento. O certo seria criar um variável e chamar a função com ela:

string p;

cin >> p;

placa1.setPlaca(p);

 

adicionado 4 minutos depois

Porém seu código não está bem estruturado. Deveria tem um laço do..while() para fazer o menu se repetir até digitar 3; Além disso, as opções de menu devem ser escritas com switch/case.

  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

Muito obrigado Luís, eu já apaguei o carro (string placa) { };

 também já corrigi o cout << placa1.getPlaca();

e já comecei a trocar as opções do menu pelo switch/case        (eu tinha totalmente me esquecido que isso existia)

agora o probleminha é que esta dando erro na parte de : placa1.setPlaca(p);

eu entendi que deveria declarar a    string p;      antes de chamar o     placa1.setPlaca(p);   , no main, porém dentro dele já existe algo, a string x  , o que vai acontecer com ela, e como e devo chamar ele sem usar cout , já que aparece o erro de 

48    12    [Error] no match for 'operator<<' (operand types are 'std::ostream {aka std::basic_ostream<char>}' and 'void')

 

 

 

Link para o comentário
Compartilhar em outros sites

2 horas atrás, igordinhow disse:

Muito obrigado Luís, eu já apaguei o carro (string placa) { };

 também já corrigi o cout << placa1.getPlaca();

e já comecei a trocar as opções do menu pelo switch/case        (eu tinha totalmente me esquecido que isso existia)

agora o probleminha é que esta dando erro na parte de : placa1.setPlaca(p);

eu entendi que deveria declarar a    string p;      antes de chamar o     placa1.setPlaca(p);   , no main, porém dentro dele já existe algo, a string x  , o que vai acontecer com ela, e como e devo chamar ele sem usar cout , já que aparece o erro de 

48    12    [Error] no match for 'operator<<' (operand types are 'std::ostream {aka std::basic_ostream<char>}' and 'void')

 

 

 

Pra chamar a função é só escrever ele com o argumento, tipo placa1.setPlaca(p), nada mais.

O string x na função só indica que ela está pedindo um argumento. Junte os parênteses ao nome.

Mostre como ficou o código.

Link para o comentário
Compartilhar em outros sites

#include <iostream>
#include <string>
using namespace std;
class carros {
    public:
        void setPlaca (string x) { 
            placa = x;
        }
        string getPlaca() {
            return placa;
        }
    private:
        string placa;
};
int main(int argc, char *argv[]) {
    carros placa1;
    int a;
    int b;
    int d;
    int e;
    int menu = 0;
    string adcPlaca;
    string adcCarro;
    int menu1 = 0;
    int menu2 = 0;
    int menu3 = 0;
        cout << "Escolha uma opcao: \n "  "1- Adicionar informacao. \n"  " 2- Coletar informacao. \n";
            cin >> menu;
        switch (menu) {
            case 1:
                cout << "voce escolheu a opcao adicionar informacao: \n"  " 1- Adiciona placa. \n " "2- Adiciona carro. \n "  "3- Volta. \n";
                    cin >> menu1;
                    switch (menu1) {
                        case 1:
                            string p;
                    placa1.setPlaca(p);
                        cin >> p;
                    }
                break;
            case 2:    
                cout << placa1.getPlaca();
        }
    return 0;
}

 

Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...