Compilar uma classe C ++ no Xcode: Erro durante a compilação: STL Vector
Pergunta
Eu tenho uma classe C ++ que compila bem no Linux com o GCC e nas viúvas no Visual Studio.
boid.h:
#ifndef BOID_CLASS_HEADER_DEFINES_H
#define BOID_CLASS_HEADER_DEFINES_H
#include "defines.h"
class Boid {
public:
// Initialize the boid with random position, heading direction and color
Boid(float SceneRadius,float NormalVel);
.....
protected:
...
};
#endif
e em boid.cpp:
#include "Boid.h"
// Initialize the boid with random position, heading direction and color
Boid::Boid(float SceneRadius,float NormalVel)
{
....
}
No entanto, recebo o seguinte erro ao compilar este código no Xcode:
Compiling Boid.h: "error: vector: No such file or directory"
Alguma ideia? Eu pensei que você poderia pegar o código C/C ++ e compilá -lo no Xcode sem problemas?
Obrigado
EDITAR: Adicionado define.h (também adicionado #endif à amostra, mas isso estava no código original)
Editar 2: Estou recebendo um erro diferente depois de comentar um par de inclui lá estava vazio: o erro do vetor acima.
#ifndef BOID_NAV_DEFINES_H
#define BOID_NAV_DEFINES_H
#include <stdlib.h>
#include <vector>
#include "Vector3d.h"
#include "Point3d.h"
#include "win_layer.h"
#endif
Solução
Você está incluindo o cabeçalho C ++ em um arquivo .m?
Os arquivos .m são tratados como arquivos .c com extensões Objective-C.
Os arquivos .mm são tratados como arquivos .cpp com extensões Objective-C, então é chamado de Objective-C ++
Basta renomear qualquer arquivo .m para .mm, clique com o botão direito do mouse ou clique com Ctrl e selecione Renomear no arquivo no Xcode.
Outras dicas
Sem alterar nenhum .m para .mm ou algo assim, se você clicar em seu projeto, clique em Tagets-> Configurações de construção vão até "LLVM GCC 4.2 - Idiomas" (Novo Xcode diz "Compilador Apple LLVM 4.2") você verá Compilar fontes como Alterar esse valor para Objective-C ++;
Certifique -se de compilá -lo como C ++. Clique com o botão direito do mouse no arquivo no xcode e selecione Obter informação e verifique se isso Tipo de arquivo está configurado para SourCecode.cpp.cpp para os arquivos de implementação.
Espero que isso ajude. Depois de atualizar o Xcode para a versão 10, tive problemas, incluindo <Pap> e <vector>. Encontrei uma solução fácil alterando o tipo de biblioteca C ++ nas configurações de construção do projeto (configurações de construção do Target):
Biblioteca padrão C ++: libc ++ (biblioteca padrão LLVM C ++ com suporte C ++ 11)
Compilado sem nenhum problema.
Definitivamente, algo em define.h está afetando a definição de classe.
Este problema teve dois erros:
- Um dos meus inclui teve um erro de digitação que causou um erro de compilação
- O vetor não encontrado erro foi corrigido pelos arquivos .m para .mm
Supondo que você esteja falando sobre o OS X Xcode, que usa o GCC para fazer a compilação real. Portanto, não deve haver diferença entre isso e o Linux, além de talvez versões diferentes do GCC.
A primeira coisa que salta para mim aqui é que você digitou "boid.h" como o nome do arquivo, mas você está incluindo "boid.h". Supondo que isso não seja um erro de digitação, eu esperaria que isso causasse problemas no Linux e no OS X ....
Editado para responder à nova pergunta: hmmm ... o vetor é definitivamente parte do xcode: /Developer/SDKs/MacOSX10.5.sdk/usr/include/c++/4.0.0/vector
na minha máquina.
Pensamento adicional: se você portar a fonte e os arquivos do Linux Build para o Mac, provavelmente poderá compilá -lo da linha de comando exatamente como você faz no Linux ....
Não tenho certeza se você esqueceu de colar, mas você tem um #ifndef sem terminação
O que está dentro define.h ?
Editar: Você parece ter encontrado a solução. Mais uma observação:
#include <stdlib.h>
Para C ++, por favor:
#include <cstdlib>
: D