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: <a rel="next" accesskey="n" href="Name-lookup.html#Name-lookup">Name lookup</a>, 52Up: <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