C++错误:从“int*”转换为“int”会失去精度
C++ error: cast from ‘int*’ to ‘int’ loses precision
我几天前开始学习C++。
我想编译此示例程序,以便在C++中嵌入Python。
C++程序是:
#include <Python.h>
#include <iostream>
#define pi 3.141592653589793
using namespace std;
int main () {
//Inicio el interprete Python e imprimo informacion relevante
Py_Initialize();
PyObject *FileScript;
FileScript = PyFile_FromString("script.py","r");
PyRun_SimpleFile(PyFile_AsFile(FileScript),"r");
PyObject *retorno, *modulo, *clase, *metodo, *argumentos, *objeto;
int *resultado;
modulo = PyImport_ImportModule("script");
clase = PyObject_GetAttrString(modulo, "Numeros");
argumentos = Py_BuildValue("ii",5,11);
objeto = PyEval_CallObject(clase, argumentos);
metodo = PyObject_GetAttrString(objeto, "suma");
argumentos = Py_BuildValue("()");
retorno = PyEval_CallObject(metodo,argumentos);
PyArg_Parse(retorno, "i", &resultado);
cout<<"Result is: "<<int(resultado)<<endl;
Py_Finalize();
char terminar;
cin>>terminar;
return 1;
}
而python脚本"script.py"是:
class Numeros:
def __init__(self, num1, num2):
self.num1=num1
self.num2=num2
def suma(self):
print self.num1, self.num2
return self.num1+self.num2
我正在使用安装了 G++ 的 Ubuntu。我输入这个来编译:
g++ -I/usr/include/python2.7 -lpython2.7 main.cpp -o main
但是我收到此错误:
main.cpp:27:42: error: cast from ‘int*’ to ‘int’ loses precision [-fpermissive]
cout<<"Result is: "<<int(resultado)<<endl;
我该如何解决?非常坦克你!
指针的大小可能大于 int 的大小,并且取决于内存模型。
int iSomeValue = 0;
std::cout << "size of int = " << sizeof(iSomeValue)<< " | size of pointer = " << sizeof(&iSomeValue);
对于 Visual Studio 2013,Win32 输出为:
整数大小 = 4 | 指针大小 = 4
对于 Visual Studio 2013 x64,输出为:
整数大小 = 4 | 指针大小 = 8
对于 64 位机器,将 int 指针(十六进制格式(转换为 int 值或将 char 指针转换为 int 值是很棘手的,因为 int 变量的每个内存块都是 32 位,对于 char 是 8 位。例如:
1. char SomeString[] = "Hello!";
2. char *pString = SomeString;
3. cout << "pString = " << pString << endl;
4. char *pLocation3 = &SomeString[3];
5. cout << "pLocation3 = " << (int)pLocation3 << endl;
你会得到一个错误:从"char*"转换为"int"会失去精度[-fallowive]
为了在第 5 行而不是 (int(pLocation3 中解决这个问题,我们必须使用 (int64_t(pLocation3 作为可兼容的 64 位机器。
相关文章:
- 从"int*"强制转换为"unsigned int"会丢失精度错误
- 为什么将双精度转换为 int 似乎在第 16 位数字之后将其四舍五入?
- 主.cpp:18:20:错误:从"int*"转换为"int"会失去精度 [-fa
- 如何解决隐式转换丢失整数精度:'size_t'(又名"无符号长")到'int'警告?
- int 到浮点转换的精度损失
- 将非常大的 int 转换为双倍,在某些计算机上会损失精度
- f 是指向函数的指针,该函数采用 int,并返回指向不带任何内容并返回双精度的函数的指针
- 将双精度值分配给 int 数组时的类型转换
- 标准::p空气<矢量、双精度的初始值设定项列表<int>>
- 如果我在 C++ 中为 int 提供双精度,输入缓冲区中存储了什么?
- 是否应该避免这种从 int 到双精度的静态转换?
- 在 C++ 中将 int 转换为双精度
- 将大双精度转换为无符号 int 期间堆栈损坏
- 将 int 转换为双精度以执行 std::complex <double>的"*"操作
- C++错误:从“int*”转换为“int”会失去精度
- 从 double* 转换为 int 会失去精度
- 隐式转换会丢失整数精度:'long' 到 'int'
- C++ 将 int 转换为双精度不起作用
- 在算术表达式中,双精度会隐式转换为无符号 int 吗?
- C++:使用一对(cpp_int,int)整数作为无序映射中的键(其中cpp_int是boost多精度整数)