Muitas Dùvidas

ninita

Power Member
Boas noites

Estou com alguns problemas ao fazer um trabalho em C++.
Neste momento tenho erros de linkagem que não sei como me livro deles.
Depois tenho duvidas em alguns codigos.
void menuClientes()
{
int opcao;

do
{
cout << "1. Inserir Cliente" << endl;
cout << "2. Alterar Cliente" << endl;
cout << "3. Eliminar Cliente" << endl;
cout << "4. Sair" << endl;
cin >> opcao;
}
while (opcao<1 || opcao>4);

switch (opcao)
{
case 1: insereCliente();
break;
case 2: submenu_alteraCliente();
break;
case 3:submenu_eliminaCliente();
break;
case 4:
break;
}
}


void submenu_alteraCliente()
{
string nome;
int i, flag=0;

do
{
cout << "Qual o Cliente que deseja alterar?" << endl;
cin >> nome;
for (i=0; i<clientes.size(); i++)
{
if (strcmp(clientes.cl_nome, nome) == 0)
{
alteraCliente();
}
else
break;
}

}
while (flag=0);
}

void submenu_eliminaCliente()
{
int opcao;

do
{
cout << "1. Eliminar por Nome" << endl;
cout << "2. Eliminar por Numero" << endl;
cout << "3. Sair" << endl;
cin >> opcao;

}
while(opcao<1 || opcao>2);

switch (opcao)
{
case 1: eliminaNome();
break;
case 2: eliminaNumero();
break;
case 3:
break;
}

}

void eliminaNome()
{
string nome;
int i, flag=0;

do
{
cout << "Qual o nome do Cliente que deseja apagar?" << endl;
cin >> nome;
for (i=0; i<clientes.size(); i++)
{
if (strcmp(clientes.cl_nome, nome) == 0)
{
eliminaCliente();
}
else
break;
}

}
while (flag=0);
}

void eliminaNumero()
{
string numero;
int i, flag=0;

do
{
cout << "Qual o numero do Cliente que deseja apagar?" << endl;
cin >> numero;
for (i=0; i<clientes.size(); i++)
{
if (strcmp(clientes.id_cliente, numero) == 0)
eliminaCliente();
else
break;
}

}
while (flag=0);
}

Acham que este código está correcto? Eu acho que os strcmp estão mal uma vez que me dão o seguinte erro: error C2664: 'strcmp' : cannot convert parameter 1 from 'class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >' to 'const c.

Obrigado
 
pelo que li do código tás a usar um tipo básico, neste caso o string. Sendo um tipo básico não precisa do strcmp, basta fazeres como fazes com 1 inteiro (==, <, >, etc).

ex:
if (strcmp(clientes.cl_nome, nome) == 0) fica if (clientes.cl_nome == nome)
 
Obrigado pela ajuda. Já não dá erros. Agora tenho é erros de linkagem:
Main.obj : error LNK2001: unresolved external symbol "void __cdecl menuProdutos(void)" (?menuProdutos@@YAXXZ)
Main.obj : error LNK2001: unresolved external symbol "void __cdecl menuUtilizadores(void)" (?menuUtilizadores@@YAXXZ)
Main.obj : error LNK2001: unresolved external symbol "void __cdecl insereCliente(void)" (?insereCliente@@YAXXZ)
Main.obj : error LNK2001: unresolved external symbol "void __cdecl alteraCliente(void)" (?alteraCliente@@YAXXZ)
Main.obj : error LNK2001: unresolved external symbol "void __cdecl eliminaCliente(void)" (?eliminaCliente@@YAXXZ)
Main.obj : error LNK2001: unresolved external symbol "public: __thiscall Clientes::~Clientes(void)" (??1Clientes@@QAE@XZ)
Main.obj : error LNK2001: unresolved external symbol "public: __thiscall Produtos::~Produtos(void)" (??1Produtos@@QAE@XZ)
Main.obj : error LNK2001: unresolved external symbol "public: __thiscall Utilizadores::~Utilizadores(void)" (??1Utilizadores@@QAE@XZ)
Main.o

Como me vejo livre disto?
Obrigado
 
Já não mexo em C++ há algum tempo mas uma coisa que notei foi que nao tens nenhuma função main. Se bem me recordo tens que ter uma função public static int main (...) [Não me lembro dos parâmetros] para que o programa saiba por onde começar a execução do código...

Vejo também que não usas classes mas acho (corrijam-me se estiver enganado) não é obrigatório no C++ pelo que não acho que venha daí o teu problema.

Ah! A ordem com que declaras as funções é importante. Não podes chamar uma função que ainda não tenhas declarado. Por exemplo se na função xpto chamas a zxcv() essa última tem que estar declarada e/ou definida ANTES da xpto... Talvez seja mm este o teu problema ;)
 
Boas

Eu tenho um menu main, só não pus foi aqui o codigo todo. Tanto o main como as classes estao bem (pelo menos acho eu). A ordem das funções também estão correctas porém, continuo sempre com estes erros de linkagem. Já não sei que mais hei-de fazer...
Ajudem-me por favor
 
Back
Topo