相关疑难解决方法(0)

将一个C结构铸造成另一个

我有两个相同(但命名不同)的C结构:

typedef struct {
      double x;
      double y;
      double z;
} CMAcceleration;


typedef struct {
    double x;
    double y;
    double z;   
} Vector3d;
Run Code Online (Sandbox Code Playgroud)

现在我想将一个CMAcceleration变量赋给一个Vector3d变量(复制整个结构).我怎样才能做到这一点?

我尝试了以下但是得到了这些编译错误:

vector = acceleration;           // "incompatible type"
vector = (Vector3d)acceleration; // "conversion to non-scalar type requested"
Run Code Online (Sandbox Code Playgroud)

当然,我可以单独设置所有成员:

vector.x = acceleration.x;
vector.y = acceleration.y;
vector.z = acceleration.z;
Run Code Online (Sandbox Code Playgroud)

但这似乎很不方便.

什么是最好的解决方案?

c struct casting

41
推荐指数
6
解决办法
4万
查看次数

C有像C++这样的一个定义规则吗?

最近,我发现有些情况绝对会违反C++的ODR,但在C编译器中会编译好.

例如,这个奇怪的场景(和我一起):

来源1

int var_global=-3;
Run Code Online (Sandbox Code Playgroud)

来源2

#include <stdio.h>
#include <conio.h>

unsigned int var_global;

int main() {    

 printf("%d \n",var_global);
 getch();
 return 0;

}
Run Code Online (Sandbox Code Playgroud)

我有打印结果-3(即使在源2 var_global中unsigned)并且没有关于重新定义的错误var_global.

我知道C与C++有不同的规则,但我认为它不是那么不同.

我有谷歌并阅读了很多结果,但没有像 C++ 这样的官方结果.

所以问题是:

C有像C++这样的一个定义规则吗?

和:

什么叫官方?

我需要它与C++规则进行比较,这样我才能更深入地理解这两种语言.

p/s:我使用Visual Studio 2010编译上面的代码.

c c++ global-variables variable-declaration language-lawyer

17
推荐指数
1
解决办法
1024
查看次数

具有相同名称,不同定义的结构:使用-O2进行分段故障

我在C++程序中遇到了一个分段错误,当两个C++文件一起编译时,每个C++文件包含一个不同的结构定义(具有相同的名称).

根据这个问题,我理解结构定义仅限于翻译单元(文件及其内容).

但是,在编译时启用-O1或更多时,我遇到了崩溃.以下最小代码再现了段错误.

代码有3个简短的C++文件和2个标题:

// td_collision1.cc
#include <iostream>
#include <vector>
#include <cstdlib>
#include "td1.h"

struct Data
{
  long a;
  double m1;
  double m2;
};

void sz1(void) {
    std::cout << "Size of in collision1: " << sizeof(struct Data) << std::endl;
}

void collision1(void) {
    struct Data tmp;
    std::vector<struct Data> foo;
    for (int i=0; i<10; i++) {
        tmp.a = 1;
        tmp.m1 = 0;
        tmp.m2 = 0;
        foo.push_back(tmp);
    }
}
// td1.h
#include <iostream>

void collision1(void);
void sz1(void);

// td_collision2.cc
#include …
Run Code Online (Sandbox Code Playgroud)

c++ struct segmentation-fault translation-unit

1
推荐指数
1
解决办法
163
查看次数