Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/143.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;将模板指针强制转换为字符指针时不执行代码_C++_Cygwin - Fatal编程技术网

C++ C++;将模板指针强制转换为字符指针时不执行代码

C++ C++;将模板指针强制转换为字符指针时不执行代码,c++,cygwin,C++,Cygwin,Cygwin 3.2.0 克马克3 您好,我是C++新手(昨天刚开始),所以我对指针不太熟悉。据我所知,指针只是某个东西的第一个索引在内存中的一个位置,编译器会在递增时自动将指针地址缩放到它指向的任何位置。从下面的代码和输出来看,这是Cywgin编译器中的错误还是我使用的指针错误?(除了下面显示的捕获异常的try/catch语句外,没有其他语句) 方法\u put是从方法write调用的,类V与write泛型相同。在下面的代码中,我试图执行\u put(2)。我希望程序抛出异常或从DLL打印“\

Cygwin 3.2.0
克马克3

您好,我是C++新手(昨天刚开始),所以我对指针不太熟悉。据我所知,指针只是某个东西的第一个索引在内存中的一个位置,编译器会在递增时自动将指针地址缩放到它指向的任何位置。从下面的代码和输出来看,这是Cywgin编译器中的错误还是我使用的指针错误?(除了下面显示的捕获异常的try/catch语句外,没有其他语句)

方法
\u put
是从方法
write
调用的,类
V
与write泛型相同。在下面的代码中,我试图执行
\u put(2)
。我希望程序抛出异常或从DLL打印
“\n从DLL工作”
并返回
1
。在这种情况下,这两种情况都没有发生,这让我很困惑,为什么put方法代码的第二部分没有在没有错误的情况下执行,以找出发生了什么

//Code buried in a shared library (.dll)
//Trial 1 Code
template<class V>
void _put(long long index, V v){
    std::cout << std::endl << "From DLL";
    //void* t = (void*) v; //Works
    char* t = (char*) v; //Fails
    std::cout << std::endl << "Working from DLL?" << t;
}

//Code buried in a shared library (.dll)
//Trial 2 Code
template<class V>
void _put(long long index, V v){
    std::cout << std::endl << "From DLL";
    void* t = (void*) v; //Works
    //char* t = (char*) v; //Fails
    std::cout << std::endl << "Working from DLL?" << t;
}
试验2代码的输出:

From Exe
From DLL
Working from DLL?0x2 Test
Process finished with exit code 1

如果要这样做:

char* t = (char*) v;
std::cout << std::endl << "Working from DLL?" << t;

如果要这样做:

char* t = (char*) v;
std::cout << std::endl << "Working from DLL?" << t;

“失败”是什么意思?代码中充满了使其无法编译的错误,修复它以查看发生了什么需要猜测您想做什么。@vonbrand。代码在编译时抛出了新错误,并且编译得很好。事实上,这只是部分原因executed@JaMiT如果您注意到在main方法中,我让它返回1。在第一次试验中,它返回0,并且它也不会打印输出方法的最后一半(“从DLL工作”等)。我期望抛出异常,或者代码返回1并打印期望的行。因为它也不起作用,我想这是一个bug。对于C++来说,我是最新的,所以可能发生错误,没有任何异常被抛出,我不知道我的坏,修正了这个问题,希望能更容易地显示我的意图。你缺少了一个定义:<代码>内存::隐马尔可夫模型。。。另外,
内存的析构函数
可能是相关的,因为在为另一个异常展开堆栈时抛出和异常会导致程序立即终止。那么,也许是对
内存
的一个精简而完整的定义?你说的“失败”是什么意思?代码中充满了使其无法编译的错误,修复它以查看发生了什么需要猜测您想做什么。@vonbrand。代码在编译时抛出了新错误,并且编译得很好。事实上,这只是部分原因executed@JaMiT如果您注意到在main方法中,我让它返回1。在第一次试验中,它返回0,并且它也不会打印输出方法的最后一半(“从DLL工作”等)。我期望抛出异常,或者代码返回1并打印期望的行。因为它也不起作用,我想这是一个bug。对于C++来说,我是最新的,所以可能发生错误,没有任何异常被抛出,我不知道我的坏,修正了这个问题,希望能更容易地显示我的意图。你缺少了一个定义:<代码>内存::隐马尔可夫模型。。。另外,
内存的析构函数
可能是相关的,因为在为另一个异常展开堆栈时抛出和异常会导致程序立即终止。因此,可能是对
内存
的一个精简但完整的定义,所以V必须是指向work?的指针的有效字符串,这就解释了它失败的原因。是否有任何方法可以获取原始地址并以字符(字节)形式迭代v的长度?是的。我不确定我是否理解你的第二个问题,但非类型化数据并没有长度。
char*
也不是这样,但按照惯例,它以允许计算长度的
nul
字节结束(例如,
strlen
)。我将数据的长度带到其他地方(我删除了该方法之前的内容,因为我试图调试它为什么不能正常工作)。假设我有一个4字节的整数。我是否可以将其转换为一个字符指针,并使用该字符指针获得与整数字节相对应的4个字符?这应该是一个新问题,其中应该包括尝试自己对其进行编码。在这里试图回答这个问题只会使事情复杂化。我仍然不太清楚为什么在代码执行时没有抛出错误。它似乎在施展该角色时神奇地退出了0。有没有一种方法可以捕获这个异常,或者这是正常的?因此V必须是指向work的指针的有效字符串?这就解释了它失败的原因。是否有任何方法可以获取原始地址并以字符(字节)形式迭代v的长度?是的。我不确定我是否理解你的第二个问题,但非类型化数据并没有长度。
char*
也不是这样,但按照惯例,它以允许计算长度的
nul
字节结束(例如,
strlen
)。我将数据的长度带到其他地方(我删除了该方法之前的内容,因为我试图调试它为什么不能正常工作)。假设我有一个4字节的整数。我是否可以将其转换为一个字符指针,并使用该字符指针获得与整数字节相对应的4个字符?这应该是一个新问题,其中应该包括尝试自己对其进行编码。在这里试图回答这个问题只会使事情复杂化。我仍然不太清楚为什么在代码执行时没有抛出错误。它似乎在施展该角色时神奇地退出了0。是否有方法捕获此异常或这是正常的?
char* t = (char*) v;
std::cout << std::endl << "Working from DLL?" << t;
std::cout << std::endl << "Working from DLL?" << (void *) t;