微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

C2372 重新定义;不同类型的间接

如何解决C2372 重新定义;不同类型的间接

我正在尝试在我的其他文件之一中定义/声明一个 int 数组变量。

Other_file.h

#pragma once
extern int* Test = new int[2]; // <- Here I declare(at least by my understanding)

Other_file.cpp

#include <iostream>
#include "Other file.h"

int* Test[2]; // <- Line that causes error...

然后是 Main.cpp

#include <iostream>
#include "Other file.h"

int main() {
    std::cout << Test;
    return 0;
}

每次我收到这个错误Error C2372 'Test': redeFinition; different types of indirection | Other File.cpp | line 4 仅供参考,我使用的是 MSVC 2019。

解决方法

extern int* Test = new int[2]; // <- Here I declare(at least by my understanding)

不,这是一个定义。这将是声明:

extern int* Test; // note,no value

同样,这两个声明是不兼容的,这就是错误试图告诉你的。 int*[2]int* 完全不同。

,

本声明

extern int* Test = new int[2];

也是一个带有外部链接的指针的定义,因为该指针已被初始化。

然后在源文件 "Other_file.cpp" 中,您将名称 Test 重新定义为 int * 类型的两个元素的数组。

#include "Other file.h"

int* Test[2]; 

所以编译器会报错。

实际上上面的代码片段等价于

extern int* Test = new int[2];
int* Test[2]; 

如果你想声明一个指针,那么在头 "Other file.h" 中声明它就像

extern int* Test;

然后在源文件中"Other_file.cpp"写入

#include "Other file.h"

int *Test = new int[2];

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。