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
Foi útil?

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

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