2015-11-03 70 views
-3

我有一个结构,我想填写一个单独的源文件从我正在运行main。在头文件中我包含了extern,但是当我去定义源文件中的变量时,它不起作用。Extern变量C++

//This is a header file 
    struct example { 
     int data1; 
     float data2; 
     bool example; 
    } 

    extern example tmp; 

,然后在源文件:

example *tmp = new example; 

我得到错误 “Expected unqualified-id”。这是为什么?

+0

你真的环顾四周吗? http://stackoverflow.com/questions/1433204/how-do-i-use-extern-to-share-variables-between-source-files-in-c在这里回答它很好。另外我没有明白:为什么你使用不同的数据类型?(ptr和var) – Lasoloz

+0

我真的环顾四周,已经看到了。然而,这并没有帮助这个特定的例子。我正在使用ptr,因为当我没有收到错误消息:“没有可行的从'example *'转换为'example'”。我在答复的评论中也提到了这一点。 –

回答

1
  • 声明结构后缺少分号。
  • extern声明中的类型和定义不同:example vs example*
+0

对不起,逗号是一个错字。我的代码中有逗号。我删除了星号,现在我的代码显示为:“example tmp = new example;”然而,那会得到一个错误,内容如下:“没有可行的从'example'到'example'的转换”“ –

+1

这是因为'new'返回一个指向分配内存的指针! – CinCout

+1

@phantazein假设评论,我必须问:你确切知道指针和内存分配如何工作?如果你不完全了解,请再试一次 - 这不是一种冒犯,我没有在一天内学习,但我学会了。回到你的问题:如果你创建了extern指针,那么它是extern指针而不是(简单的)变量。因此,声明“extern example tmp”,然后使用“example * tmp”是错误的,因为第一个不是指针。因为tmp不是指针,所以创建“extern example tmp”然后分配是错误的。这意味着你不需要使用新的关键字,或者你应该在.h中声明指针。 – Lasoloz