• Home
  • History
  • Annotate
  • Line#
  • Navigate
  • Raw
  • Download
  • only in /asuswrt-rt-n18u-9.0.0.4.380.2695/release/src-rt-6.x.4708/toolchains/hndtools-armeabi-2011.09/share/doc/arm-arm-none-eabi/html/gcc/
1<html lang="en">
2<head>
3<title>Static Definitions - Using the GNU Compiler Collection (GCC)</title>
4<meta http-equiv="Content-Type" content="text/html">
5<meta name="description" content="Using the GNU Compiler Collection (GCC)">
6<meta name="generator" content="makeinfo 4.13">
7<link title="Top" rel="start" href="index.html#Top">
8<link rel="up" href="C_002b_002b-Misunderstandings.html#C_002b_002b-Misunderstandings" title="C++ Misunderstandings">
9<link rel="next" href="Name-lookup.html#Name-lookup" title="Name lookup">
10<link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
11<!--
12Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997,
131998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009,
142010 Free Software Foundation, Inc.
15
16Permission is granted to copy, distribute and/or modify this document
17under the terms of the GNU Free Documentation License, Version 1.3 or
18any later version published by the Free Software Foundation; with the
19Invariant Sections being ``Funding Free Software'', the Front-Cover
20Texts being (a) (see below), and with the Back-Cover Texts being (b)
21(see below).  A copy of the license is included in the section entitled
22``GNU Free Documentation License''.
23
24(a) The FSF's Front-Cover Text is:
25
26     A GNU Manual
27
28(b) The FSF's Back-Cover Text is:
29
30     You have freedom to copy and modify this GNU Manual, like GNU
31     software.  Copies published by the Free Software Foundation raise
32     funds for GNU development.-->
33<meta http-equiv="Content-Style-Type" content="text/css">
34<style type="text/css"><!--
35  pre.display { font-family:inherit }
36  pre.format  { font-family:inherit }
37  pre.smalldisplay { font-family:inherit; font-size:smaller }
38  pre.smallformat  { font-family:inherit; font-size:smaller }
39  pre.smallexample { font-size:smaller }
40  pre.smalllisp    { font-size:smaller }
41  span.sc    { font-variant:small-caps }
42  span.roman { font-family:serif; font-weight:normal; } 
43  span.sansserif { font-family:sans-serif; font-weight:normal; } 
44--></style>
45<link rel="stylesheet" type="text/css" href="../cs.css">
46</head>
47<body>
48<div class="node">
49<a name="Static-Definitions"></a>
50<p>
51Next:&nbsp;<a rel="next" accesskey="n" href="Name-lookup.html#Name-lookup">Name lookup</a>,
52Up:&nbsp;<a rel="up" accesskey="u" href="C_002b_002b-Misunderstandings.html#C_002b_002b-Misunderstandings">C++ Misunderstandings</a>
53<hr>
54</div>
55
56<h4 class="subsection">11.8.1 Declare <em>and</em> Define Static Members</h4>
57
58<p><a name="index-C_002b_002b-static-data_002c-declaring-and-defining-3329"></a><a name="index-static-data-in-C_002b_002b_002c-declaring-and-defining-3330"></a><a name="index-declaring-static-data-in-C_002b_002b-3331"></a><a name="index-defining-static-data-in-C_002b_002b-3332"></a>When a class has static data members, it is not enough to <em>declare</em>
59the static member; you must also <em>define</em> it.  For example:
60
61<pre class="smallexample">     class Foo
62     {
63       ...
64       void method();
65       static int bar;
66     };
67</pre>
68 <p>This declaration only establishes that the class <code>Foo</code> has an
69<code>int</code> named <code>Foo::bar</code>, and a member function named
70<code>Foo::method</code>.  But you still need to define <em>both</em>
71<code>method</code> and <code>bar</code> elsewhere.  According to the ISO
72standard, you must supply an initializer in one (and only one) source
73file, such as:
74
75<pre class="smallexample">     int Foo::bar = 0;
76</pre>
77 <p>Other C++ compilers may not correctly implement the standard behavior. 
78As a result, when you switch to <samp><span class="command">g++</span></samp> from one of these compilers,
79you may discover that a program that appeared to work correctly in fact
80does not conform to the standard: <samp><span class="command">g++</span></samp> reports as undefined
81symbols any static data members that lack definitions.
82
83 </body></html>
84
85