Вы не можете.
Либо используйте списки для конкретных типов (один список для ваших символов-указателей, один список для ваших целых) или используйте структуру или объединение для хранения обоих типов значений с полем, которое указывает тип, например:
#define TYPE_INT 1
#define TYPE_STRING 2
struct MyValue
{
int type; // TYPE_INT or TYPE_STRING
union
{
char *str;
int i;
} value;
};
И сохраните эту структуру в вашем списке.
Если C ++ является опцией, рассмотрите возможность использования std :: list для хранения данных, относящихся к типу, или, если это невозможно, определите класс, аналогичный приведенной выше структуре, в котором вы экранируете различные типы данных, например, не включая проверка ошибок по типу):
class MyValue
{
public:
enum ValueType
{
TYPE_NONE;
TYPE_INT,
TYPE_STRING
};
MyValue() : m_type(TYPE_NONE) {}
MyValue(char *s) : m_type(TYPE_STRING), m_value.str(s) {}
MyValue(int i) : m_type(TYPE_INT), m_value.int(i) {}
ValueType getType() const {return m_type;}
const char *getString() const {return m_value.str;}
int getInt() const {return m_value.int;}
private:
ValueType m_type;
union InternalValue
{
char *str;
int i;
};
InternalValue m_value;
};