Ir ao conteúdo

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


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

Posts recomendados

Postado

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?

  • Solução
Postado

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
Postado

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')

 

 

 

Postado
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.

Postado
#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;
}

 

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...

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!