Pergunta

Eu estou failry unexperience em C++ e VS, e eu não consigo descobrir o que eu estou fazendo de errado, e, mais importante, como corrigi-lo.

Eu estou trabalhando em uma solução com vários projetos, e agora estou começando a utilizar as classes de um projeto no outro.No entanto, estou recebendo este erro:

tlibdecoder.lib(TDecCu.obj) :erro LNK2001:externo não resolvido símbolo "público:void __thiscall CURegister::registerCU(int,int,int)" (?registerCU@CURegister@@QAEXHHH@Z)

o problema parece ser a função que eu estou usando no TDecCu.cpp, que vem de arquivos CURegister.h e CURegister.cpp.

Em cima de CURegister.cpp eu incluído CURegister.h, então a função é definida (eu possa usá-lo normalmente, dentro do mesmo projeto por jsut importar CURegister.h), mas quando eu incluir o cabeçalho TDecCu.cpp (adicionando #include "CURegister.h" no topo) parece que há um problema.

Alguém pode me dizer como resolver isso?Tenha em mente que eu sou inexperiente, então não me importo de explicar é muito simples ;)

Obrigado antecipadamente.B

Foi útil?

Solução

Um "não resolvidos símbolo de erro" é um linker erro, como oposição a um compilador erro.A vinculação é a segunda fase do que parece ser um único "construir" o evento em uma IDE como o Visual Studio.

O problema central aqui preocupações a distinção entre declarações e definições em C++.Em suma, um declaração introduz um símbolo (como uma função) para o compilador, enquanto definição fornece real de instanciação e implementação do que um símbolo para a linker.Ao considerar uma função, a definição é que provavelmente você já ouviu referido como um protótipo.Algo como isto:

void registerCu(int x, int y, int depth);

Observe que ele não fornece a implementação para a função, portanto, é apenas uma definição.Isso é diferente de uma declaração, que fornece a implementação completa:

void registerCu(int x, int y, int depth)
{
    // do magic stuff here  
}

Se este fosse um único, auto-contido projeto, você poderia assumir que o erro de vinculador foi alertando-o que você não forneceu um definição da função.O que provavelmente significa que você escreveu um protótipo em um cabeçalho de algum lugar, mas não, na verdade, escrever o conteúdo da função correspondente .arquivo cpp.

Mas, desde os seus comentários, de facto, a resposta de indicar que você tem, de fato, desde a implementação em um .arquivo cpp, e a questão diz que você está trabalhando com vários projetos, é mais provável que o segunda projeto não é possível encontrar a definição de função.Você já incluído o cabeçalho do primeiro projeto que fornece a declaração para o segundo projeto, de modo que o compilador é feliz.Mas quando o vinculador chega, na verdade, tentando vincular o código do objeto para que a chamada de função, ele vem até desapontado, porque ele não pode encontrar a definição.

Corrigir este instruindo o linker para o segundo projeto para examinar o código do objeto para o primeiro projeto para quaisquer definições que não podem encontrar.Geralmente você fazer isso adicionando o caminho para a pasta que contém a compilação de saída para o seu primeiro projeto para o vinculador configurações para o seu segundo projeto.

Outras dicas

Você deve adicionar ambos curegister.h e curegister.cpp para o projeto em que o TDECCU.cpp está em.

.h contém apenas a declaração, enquanto a implementação de constata .cpp, quando um projeto é compilado, o compilador tentará encontrar toda a implementação necessária dos arquivos de projeto ou de alguns arquivos lib referenciados pelo projeto.

Se você incluir .h no seu arquivo, não há como o compilador para localizar sua implementação.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top