- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在为 Matlab 编写一个 mex 函数,并在编译期间注意到来自 Visual Studio 2017 的警告。在几乎删除除包含的所有内容和 mex 函数的裸包装器之后,我不得不得出结论,警告实际上指向库本身:
#include <mexplus/mxarray.h>
void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])
{
}
此代码段已触发警告
...\mexplus\mxarray.h(737): warning C4267: 'argument': conversion from 'size_t' to 'int', possible loss of data
我查看了该文件,确实有一个循环通过 std::vector
在 size_t
中迭代,同时调用一个先前定义的函数,该函数采用int
作为参数:
733: std::vector<std::string> fieldNames() const {
734: MEXPLUS_ASSERT(isStruct(), "Expected a struct array.");
735: std::vector<std::string> fields(fieldSize());
736: for (size_t i = 0; i < fields.size(); ++i)
737: fields[i] = fieldName(i);
738: return fields;
739: }
函数 fieldName
定义在上面:
std::string fieldName(int index) const {
const char* field = mxGetFieldNameByNumber(array_, index);
MEXPLUS_ASSERT(field, "Failed to get field name at %d.", index);
return std::string(field);
}
因此,由于 size_t
到 int
的转换已经在不同的环境中造成了一些困惑,我的问题是:
fieldNames()
(或者更确切地说,要求函数 fieldName(int index)
将整数作为争论)?最佳答案
您可以安全地忽略它。
这里很好地描述了为什么循环可以这样写来自 http://en.cppreference.com/w/cpp/types/size_t :
std::size_t is commonly used for array indexing and loop counting. Programs that use other types, such as unsigned int, for array indexing may fail on, e.g. 64-bit systems when the index exceeds UINT_MAX or if it relies on 32-bit modular arithmetic.
size_t
的实际值,即可分配的最大内存量,将取决于系统。编译器看起来将 0(在 i = 0
中)转换为 int
然后抛出警告,因为它只是将可用范围减少了一半(即,而不是一个 unsigned int
)。
但在实践中,i
可能仍然可以索引到 2^32 的值(这是它依赖于平台的地方),而你可能不会处理具有那么多字段名称的结构。
Might this warning actually point to an error in my configuration file?
我不这么认为。
Can I safely ignore this?
是的。
关于c++ - Matlab/Mex : Conversion warning in mxarray. h,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45870468/
我正在尝试从 C 代码调用 matlab 函数,尝试遵循我可以通过网络获得的任何信息。我正在使用在 Ubuntu 14.04 上运行的 matlab 版本 R2014a。假设函数 testfun.m
我正在尝试使用函数 mexCallMATLAB 作为 described here . 但是,我总共有 4 个输入参数,因此我通过这样做创建了一个 mxArray mxArray *funcInput
我遇到了一些指针困惑: 我有一些(数值配方)C 函数 fitexy(in, &out),我想将其编译为 .mex 文件以从 matlab 调用它。但是,我无法让网关例程访问out的指针,以便将其传递给
我喜欢使用 mexEvalString 因为它很容易在 mex 中执行。但是,我得到了一些命令的异常,所以我想使用 mexEvalStringWithTrap 捕获它们以查看发生了什么,但我无法从异常
我需要在 mex 函数中计算一些变量的散列函数。特别是我需要处理一个 24x1 geopoint 的变量 vector 。为此,我需要检查它的类,因为可能有任何变量作为输入,所以我使用 mxGetCl
好吧,伙计们,我感觉自己好像掉进了兔子洞...... 为了构建一个作为 Matlab-Mex 的接口(interface)来接收由复杂的 C 结构组成的多个不同消息,我想在不同的函数中创建相应的 Me
这就是我要实现的目标: MATFile *file = matOpen(this->filename.c_str(),"r"); mxArray *roadstruct = matGetVariabl
我正在为 Matlab 处理一个巨大的矩阵(超过 20.000x20.000 double )的文件。我想在完成计算后,将作为本征矩阵处理的结果矩阵映射到 mxArray,而无需内存复制和在内存上分配
我有 MATLAB mex 代码,可以侵入 mxArray header 以读取和修改诸如 CrossLink 指针(用于共享数据副本)等字段。这对于允许我在 mex 例程中处理非常大的变量而无需创建
我尝试使用 VS 2010 MATLAB 2012b MEX 代码段并收到此错误 c:\users\krzysztof\desktop\libocas_v096\libocas_v096\sparse
我经常通过在 mex 中实现来优化一些 matlab 例程。到目前为止这工作正常 - 但每当创建返回 mxArray 时,它都会在我使用 mxCreateNumericArray 构建它时进行预初始化
我想在 C++ 代码中使用“engine.h”将矩阵发送到 Matlab。事实上,我在 cv::Mat 中有数据,我需要发送一个 mxArray。我尝试使用这个表达式,但它不起作用: cv::Mat
我使用 mex 在 matlab 中得到了一个典型的 cpp 函数 #include "mex.h" void func (int * rowvec, int * colvec, float * va
我正在为 Matlab 编写一个 mex 函数,并在编译期间注意到来自 Visual Studio 2017 的警告。在几乎删除除包含的所有内容和 mex 函数的裸包装器之后,我不得不得出结论,警告实
我正在尝试使用 mex.h将我编写的 c++ 程序转换为 Matlab 命令的 header ,但我不明白它们的 mxArray 结构是如何工作的。 假设我有一个 std::vector称为 data
我们一直在与从 Matlab 编译器创建的库进行交互。我们的问题与从库返回的数组有关。 一旦我们完成数组,我们想释放内存,但是,这样做偶尔会导致段错误。 这是 Matlab 库 (bugtest.m)
我想在 Eigen 矩阵/vector 和 mex 数组之间传递数据。在下面的代码中,我定义了一个名为 y_output 的 mex 数组,其中包含一个元胞数组。变量 y_output 将传递给 MA
我正在编写打开 Matlab API 引擎的 C++ 代码。在演示文件 Matlab_ROOT/extern/examples/eng_mat/engdemo.cpp 中,它展示了如何将简单的一维 c
我有一个数据的相关矩阵,我想使用 pca 将它们转换为不相关的集合。 所以我决定使用 matlab 引擎(c++ mex API)来执行 pca 我的问题是如何有效地将矩阵内容复制到 mxArray我
我有以下 C++ vector : std::vector myVec; 其中 myStruct 包含: struct myStruct { Point3D start; Point3D en
我是一名优秀的程序员,十分优秀!