Estoy usando C++ para desarrollar la parte algorítmica de una aplicación de iPhone, y me encuentro con un error extraño. El código que tengo, compila bien con gcc-4.2 tanto en Linux, en la Mac y en el dispositivo iPhone, pero no en el simulador, lo que hace que la depuración y las pruebas sean muy difíciles.Código que compila para el dispositivo iPhone pero no para el simulador
Los mensajes de error de los intentos de compilación para el simulador se asemejan a un error conocido en 4.0.x, aunque no está muy claro por qué dado que he configurado explícitamente gcc-4.2 para que sea el compilador predeterminado.
Para demostrar el error, he preparado el siguiente pequeño fragmento de código:
bug.cpp
#include <tr1/unordered_map>
#include <iostream>
/* a hash key for the visitedTrip table */
struct X {
int x;
X() : x(0){};
X(int x) : x(x){};
};
typedef std::tr1::unordered_map<int,X> dict;
int main()
{
dict c1;
X a(0);
X b(1);
X c(2);
c1[0] = a;
c1[1] = b;
c1[2] = c;
dict::const_iterator it;
for(it = c1.begin(); it != c1.end(); it++)
std::cout << it->first << std::endl;
return (0);
}
y luego tratado de compilar la siguiente manera:
de compilación. sh
#!/bin/bash
#
# Compiling for the simulator and compiling under gcc-4.0 return the same error message
#
#SUCCESS
c++-4.2 -arch i386 bug.cpp
#FAIL
c++-4.0 -arch i386 bug.cpp
#SUCCESS
gcc-4.2 -arch i386 -c bug.cpp
#FAIL
gcc-4.0 -arch i386 -c bug.cpp
#FAIL
gcc-4.2 -arch i386 -c bug.cpp -isysroot /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator3.1.sdk
Eventhough estoy usando gcc-4.2 para compilar para el simulador, yo estoy recibiendo el mismo mensaje de error como si estuviera compilando bajo gcc-4.0, a saber:
bug.cpp:27: error: no matching function for call to ‘Internal::hashtable_iterator<std::pair<const int, X>, false, false>::hashtable_iterator()’
/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator3.1.sdk/usr/include/c++/4.2.1/tr1/hashtable:236: note: candidates are: Internal::hashtable_iterator<Value, is_const, cache>::hashtable_iterator(const Internal::hashtable_iterator<Value, true, cache>&) [with Value = std::pair<const int, X>, bool is_const = false, bool cache = false]
/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator3.1.sdk/usr/include/c++/4.2.1/tr1/hashtable:234: note: Internal::hashtable_iterator<Value, is_const, cache>::hashtable_iterator(Internal::hash_node<Value, cache>**) [with Value = std::pair<const int, X>, bool is_const = false, bool cache = false]
/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator3.1.sdk/usr/include/c++/4.2.1/tr1/hashtable:232: note: Internal::hashtable_iterator<Value, is_const, cache>::hashtable_iterator(Internal::hash_node<Value, cache>*, Internal::hash_node<Value, cache>**) [with Value = std::pair<const int, X>, bool is_const = false, bool cache = false]
/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator3.1.sdk/usr/include/c++/4.2.1/tr1/hashtable:225: note: Internal::hashtable_iterator<std::pair<const int, X>, false, false>::hashtable_iterator(const Internal::hashtable_iterator<std::pair<const int, X>, false, false>&)
¿Alguna idea de por qué esto gcc-4.0 El error .x se introduce en el simulador, cuando de hecho se supone que el simulador está usando gcc-4.2.x donde se ha corregido este error.
+1 para el código de repro mínima y sencilla - Así es como deberían formularse las preguntas relacionadas con el código – sbk
xcode 3.1 o 3.2? leopardo de las nieves o leopardo? gcc/g ++ que viene con xcode u otro? – slf