为什么我在C++中的头文件中,类A下声明一下变量extern int test;会提示我A::test非法的存储类?? 请教!

宝宝妈妈2023-05-01  41

我刚才做了一个实验:<br>//a.cpp <br>#include <string><br><br>std::string i<br><br>//b.cpp<br>#include <iostream><br>#include <string><br><br>extern std::string i<br><br>int main ()<br>{<br>std::cout <<i <<std::endl<br>}<br><br>运行结果为:<br><br>(上面是一空行:由于末尾用了endl)<br><br>如果没有a.cpp这个文件,运行出错<br>这是一对实验(有没有a.cpp文件)<br><br>可得出这样的结论:<br>a.cpp中std::string i是定义(本来就是)<br>b.cpp中extern std::string i则是声明(你的问题)<br><br>先别急,这只是实验结果。我们还需要理论依据,那么下面就试着解释一下:<br><br>下面是另一个例子(也是第二个实验)<br>你应该知道内置类型(int等)如果作为全局变量时,定义的同时也就初始化了(一个内置类型有其对应的默认值;如果你将自定义类型也看成内置类型,那么就等于说,一个自定义类型有其对应的默认值(由默认构造函数完成))。如<br>//c.cpp<br>int i<br><br>//d.cpp<br>#include <iostream><br><br>extern int i<br><br>int main ()<br>{<br>std::cout <<i <<std::endl<br>}<br><br>那么在这里int i就是定义(并且初始化了i,初始值为0)<br>因而输出结果为<br>0<br>//这个实验的运行结果符合理论依据。<br>(我使用的编译器是visual studio 2008)<br><br><br>从这两个实验来看:(将两个“默认”等同起来)<br>int i<br>std::string i<br>都可以作为初始化i的定义性语句。<br>那么<br>extern int i<br>extern std::string i<br>也具有定义行为(这个很明显与extern的用法相悖)<br><br>在以上两个试验中:int 与 string 有“区别”吗?所有的代码都一样只不过把std::string 换成了 int而已!如果你能解释int的情况,那么我想std::string问题也就迎刃而解了!<br><br>于是我个人总结出一个结论:<br>    不论是内置类型还是自定义类型,前面有extern关键字,如果没有显式地初始化参数(即就是自定义类型的默认构造函数被extern屏蔽了,不起初始化的作用),那么就按声明对待。<br> 麻烦采纳·····

╭╮

(ˋ. ⌒

╭ � ╯.≈..

ˊ╰╯ ┌.|囿⒈兲祢会倁檤

┌.|公?饥蒂庵莹�?

┌.|地铁⒍兮钟ǐ班

┌.|苛我钔dě瑷

┌.|枽浒⒈班僦í辈子!

﹍ρsァ.2⒋小时゛都「唏望」侑鉨ˋ ̄洅莪身笾!

┼—————————┼

│ˊ , │°羙?啲囘忆.

│' .ˊ ˋ@. │

│ ╭⌒╮ `ˊ │僦像气萢.

│ˊ( .' ) '│

│ ﹏_)(﹏. │ 烟消云散..

│``~﹊`}~﹊}~`~ '│

┼—————————┼ ɑ .闪闪夺目

の断 「老天摆不平.命运我搞定」 点の

┞┮┟┱

—╃━╭╮

━—┶┱— ┍╀┑ ' \/

ヽ│ 待 ┕╁┚ ′ ○

の) -

) \

│ ヤ 緈福繻喓谁去争取? .﹎``

反正βμ是硪ˋの ﹏.

.oσ

╭⌒ ╭╭╮ ⌒╮

)) ╲╱ ))

〣.当﹎?幂询d(?茫?谙肫鹚�m?ο

ㄗs:╭ァ为什麽爷爷

**喜欢脑白金o○

ˋの ′o黒o黒..┈

′ˋ

☆━━

\ '

`^ ★.、

' \ .终迂朙絔..。

˙茹果汰暧壹个? *`

′最后受伤最深dě还是自鱾.┐

「鰗牃洅镁终飞鈈?汔恕??

•、

☆﹌~

╭つ'°._..˙,.

?洅羙逦啲糀朶 ..

?吔会凋谢?

?相?蹎瑬Z﹏_.

?到蕞后还湜会纷开.?..

`}﹊}}﹊}

┌__回忆>.洅媄yě 祗諟曾经 .!'

.☆╳╲ ‐

╲╳★.

s'**的"'〉`

都给佬仔诡下‐

唱!

нōнō!

..゛ 、单曲连播ī?ɡ..﹏ `?

z╭ ?╮╭ ﹌╮。

z(o-.-o)(o-.-o) .oО 呼噜zzОo

╭~﹊} ̄~﹊} ̄~、

┋? ﹏ ?、

┊﹏ ┊你有资格和我睡吗?

┇ ? ﹏ ? ┋

在 ┼———————————☆

二 │┉|人这⒈?|

零 │ ˊ釶许繻喓嘚詪少丶

零 │⒈柸氺⒈碗饭⒈佝莪?蹔叄?br /> 四 │ ˊ怛莪浠望.丶

当 │ 氺昰?玫箛N'饭昰你做啲.

好 │ˊ⒈佝莪?蹔呚?br /> 人 ☆ˊ昰你亲扣对莪说绌扣啲

*@

╭?%╮ ╭'''╮

(@^o^@) (⌒:⌒)

(~) ~) (~)v(~)﹏

╭《╮

(ㄗs

╰》╯ ﹎「⒉个朲.」‐*`ī.◆>

' . . .^评评啖啖才是眞.

.细氺长锍才是?郓a?

? .对你⒈?并氽姗n.☆绝卟硴?瞏

( ``_﹏ ?◣ 把深爱的人``~﹏

) (我等你)?*?

) ╱?? の名字~~

( (╱╲╱

) ╱ ╱写在烟上╭慢慢吸进肺里

( ╱ ╱

)╱ ╱ 是离心脏最近的地方

╋ㄗs:◇ .{要记dёァWǒ在等?氓?nbsp◇我真的好想你

╭ 罘想聦朙


转载请注明原文地址:https://54852.com/read/607609.html