将链表从C传递到C++; 当然,C++准备处理C,那么你应该假设使用适当的接口时没有不兼容性。 毕竟,在C中实现了很多SW,并且从C++接口。例如,我使用的是,用C实现的Qt
C代码:将链表从C传递到C++; 当然,C++准备处理C,那么你应该假设使用适当的接口时没有不兼容性。 毕竟,在C中实现了很多SW,并且从C++接口。例如,我使用的是,用C实现的Qt,c++,c,qt,C++,C,Qt,C代码: typedef my_struct_s my_struct_t, *my_struct_p; struct { int some_data; double some_more_data; my_struct_p next; } my_struct_s; void create_list() { my_struct_p next; SP_head = (my_struct_p) calloc(1, sizeof(my_struct_t)); next = (my
typedef my_struct_s my_struct_t, *my_struct_p;
struct {
int some_data;
double some_more_data;
my_struct_p next;
} my_struct_s;
void create_list()
{
my_struct_p next;
SP_head = (my_struct_p) calloc(1, sizeof(my_struct_t));
next = (my_struct_p) calloc(1, sizeof(my_struct_t));
SP_head->some_data = 1;
next->some_data = 2;
SP_head->next = next;
}
static my_struct_p SP_head=(my_struct_p)0;
extern my_struct_p get_list() {
if(!SP_head)
create_list();
return SP_head;
}
C++代码:
myclass::do_something()
{
my_struct_p list = get_list();
for(my_struct_p ptr = list; ptr; ptr = ptr->next)
{
std::cout << ptr->value;
}
}
现在,我修改了代码,将列表中的每个元素复制到一个数组中并返回该数组,它工作正常。这是否与堆栈有关,与C和C++不兼容,或者只是指示我在其他地方内存有问题?< P>当然,C++准备处理C,那么你应该假设使用适当的接口时没有不兼容性。 <>毕竟,在C中实现了很多SW,并且从C++接口。例如,我使用的是,用C实现的Qt 但是为了编译您的代码,我必须做一些更改:这里是底线 把我的清单归档
#ifdef __cplusplus
extern "C" {
#endif
struct my_struct_s {
int some_data;
double some_more_data;
struct my_struct_s *next;
};
typedef struct my_struct_s my_struct_t, *my_struct_p;
void create_list();
extern my_struct_p get_list();
#ifdef __cplusplus
}
#endif
把我的清单归档
#include "my_list.h"
#include <stdio.h>
#include <stdlib.h>
static my_struct_p SP_head=(my_struct_p)0;
void create_list()
{
my_struct_p next;
SP_head = (my_struct_p) calloc(1, sizeof(my_struct_t));
next = (my_struct_p) calloc(1, sizeof(my_struct_t));
SP_head->some_data = 1;
next->some_data = 2;
SP_head->next = next;
}
my_struct_p get_list() { return SP_head; }
查看
my_struct
和其他typedef可能会有所帮助。此外,您的代码似乎不正确(get\u head()
应该返回一个my\u struct\p
,而不是my\u struct
),这表明这可能不是真正的代码,从而进一步增加了准确答案的难度。A会很有帮助,你在写的时候可能会在没有任何帮助的情况下发现你的问题。最后,您是否正在编译调试无优化?除非你准备好进入asm,否则不要相信发布代码上的调试器。我不认为看到我的结构会有什么帮助。它只是一个普通的旧结构,带有下一个指针。以上只是伪代码,是的,函数应该返回my_struct\p。当然,我编译调试模式时没有进行任何优化。问题是,在做上述工作的概念上是否存在已知的问题。如果没有,那么我知道我需要在前面查找一个bug。编辑以显示示例结构和用法这里不应该有任何奇怪的地方,除了可能不同的打包/对齐。我还想说caling conv,但你可能已经检查过了。假设这些都是编译C或C++代码的,这应该是可行的。我很想知道,如果你将next
指针移到结构的顶部,你的体验是否会发生变化。我知道这听起来很奇怪,也许你已经这么做了,但这仍然是一个有趣的问题。对于其他地方的问题,你可能是对的。
#include "my_list.h"
#include <stdio.h>
#include <stdlib.h>
static my_struct_p SP_head=(my_struct_p)0;
void create_list()
{
my_struct_p next;
SP_head = (my_struct_p) calloc(1, sizeof(my_struct_t));
next = (my_struct_p) calloc(1, sizeof(my_struct_t));
SP_head->some_data = 1;
next->some_data = 2;
SP_head->next = next;
}
my_struct_p get_list() { return SP_head; }
#include "my_list.h"
#include <iostream>
class myclass {
public:
void do_something()
{
my_struct_p list = get_list();
for(my_struct_p ptr = list; ptr; ptr = ptr->next)
std::cout << ptr->some_data << std::endl;
}
};
int main() {
create_list();
myclass c;
c.do_something();
}
g++ my_list.c main.cpp
./a.out
1
2