Это ошибки / предупреждения, которые выдает g ++, а под каждым - соответствующий код. Любая помощь в устранении этих ошибок или пролить некоторый свет на них будет принята с благодарностью. Спасибо!
г ++ ошибка:
id31.cpp: In function ‘php_var array(int, ...)’:
id31.cpp:462: warning: cannot receive objects of non-POD type ‘class php_var’ through ‘...’; call will abort at runtime
id31.cpp:480: warning: cannot receive objects of non-POD type ‘class php_var’ through ‘...’; call will abort at runtime
соответствующий код:
#include <stdarg.h>
php_var array(int key = 0, ...)
{
va_list ap;
va_start(ap, key);
php_var arr;
arr.to_array();
int i = 0;
for(int i = 0; i < key / 2; ++i)
{
php_var key2 = va_arg(ap, php_var);
if(key2 == -1)
{
bool found = false;
for(;;)
{
for(i = 0;i < arr.keys.size(); ++i)
{
if(arr.keys[i] == (php_var) i)
found = true;
}
if(found)
++i;
else
break;
}
key2 = i;
}
php_var val = va_arg(ap, php_var);
arr.keys.push_back(key2);
arr.data.push_back(val);
};
va_end(ap);
return arr;
}
Ошибка GCC:
id31.cpp: In function ‘php_var substr(php_var, php_var, php_var)’:
id31.cpp:511: error: ambiguous overload for ‘operator-’ in ‘str.php_var::container.std::basic_string<_CharT, _Traits, _Alloc>::length [with _CharT = char, _Traits = std::char_traits<char>, _Alloc = std::allocator<char>]() - pos’
id31.cpp:511: note: candidates are: operator-(size_t, int) <built-in>
id31.cpp:511: note: operator-(size_t, double) <built-in>
id31.cpp:511: note: operator-(size_t, float) <built-in>
id31.cpp:511: note: operator-(size_t, unsigned int) <built-in>
id31.cpp:511: note: operator-(size_t, long int) <built-in>
Соответствующий код:
php_var substr(php_var str, php_var pos, php_var len)
{
if(len == 0)
len = str.container.length() - pos;
return (php_var) str.container.substr(pos, len);
}
php_var substr(php_var str, long pos, long len)
{
if(len == 0)
len = str.container.length() - pos;
return (php_var) str.container.substr(pos, len);
}
Ошибка GCC:
id31.cpp:592: error: ambiguous overload for ‘operator-’ in ‘_length - strlen(php_var)()’
id31.cpp:592: note: candidates are: operator-(const char*, const char*) <built-in>
id31.cpp:592: note: operator-(const char*, int) <built-in>
id31.cpp:592: note: operator-(const char*, int) <built-in>
id31.cpp:592: note: operator-(const char*, int) <built-in>
id31.cpp:592: note: operator-(int, int) <built-in>
id31.cpp:592: note: operator-(int, double) <built-in>
id31.cpp:592: note: operator-(int, float) <built-in>
id31.cpp:592: note: operator-(int, unsigned int) <built-in>
id31.cpp:592: note: operator-(int, long int) <built-in>
id31.cpp:592: note: operator-(double, int) <built-in>
id31.cpp:592: note: operator-(double, double) <built-in>
id31.cpp:592: note: operator-(double, float) <built-in>
id31.cpp:592: note: operator-(double, unsigned int) <built-in>
id31.cpp:592: note: operator-(double, long int) <built-in>
id31.cpp:592: note: operator-(float, int) <built-in>
id31.cpp:592: note: operator-(float, double) <built-in>
id31.cpp:592: note: operator-(float, float) <built-in>
id31.cpp:592: note: operator-(float, unsigned int) <built-in>
id31.cpp:592: note: operator-(float, long int) <built-in>
id31.cpp:592: note: operator-(unsigned int, int) <built-in>
id31.cpp:592: note: operator-(unsigned int, double) <built-in>
id31.cpp:592: note: operator-(unsigned int, float) <built-in>
id31.cpp:592: note: operator-(unsigned int, unsigned int) <built-in>
id31.cpp:592: note: operator-(unsigned int, long int) <built-in>
id31.cpp:592: note: operator-(long int, int) <built-in>
id31.cpp:592: note: operator-(long int, double) <built-in>
id31.cpp:592: note: operator-(long int, float) <built-in>
id31.cpp:592: note: operator-(long int, unsigned int) <built-in>
id31.cpp:592: note: operator-(long int, long int) <built-in>
соответствующий код:
php_var _recruit = _length - (php_var)strlen(_flag);
if (_recruit < (php_var)1)
{
return _flag;
_end_18:
return (php_var)sprintf((string)(const char*)(php_var)"%0" + (string)(const char*)_length + (string)(const char*)(php_var)"d", _flag);
}
gcc error:
id31.cpp:598: error: cannot convert ‘std::basic_string<char, std::char_traits<char>, std::allocator<char> >’ to ‘char*’ for argument ‘1’ to ‘int sprintf(char*, const char*, ...)’
соответствующий код:
if (_recruit < (php_var)1)
{
return _flag;
_end_18:
return (php_var)sprintf((string)(const char*)(php_var)"%0" + (string)(const char*)_length + (string)(const char*)(php_var)"d", _flag);
}