C++ 尝试定义私有变量时无法编译.cpp文件
我试图编译一个.cpp文件,其中包含一个.h文件,然后实现概述的类 在String.h中:C++ 尝试定义私有变量时无法编译.cpp文件,c++,g++,private,C++,G++,Private,我试图编译一个.cpp文件,其中包含一个.h文件,然后实现概述的类 在String.h中: using namespace std; class String { private: int _length; char *data; int getCharArraySize(char arr[]); 在String.cpp中: #include "String.h" u
using namespace std;
class String
{
private:
int _length;
char *data;
int getCharArraySize(char arr[]);
在String.cpp中:
#include "String.h"
using namespace std;
/*
* Private vars and methods
*/
int String::_length;
char String::*data;
int String::getCharArraySize(char arr[])
{
//method body
return 0;
}
当我尝试使用g++进行编译时,出现以下错误:
% g++ String.cpp -c
String.cpp:14:17: error: ‘int String::_length’ is not a static data member of ‘class String’
int String::_length;
我只对字符串有问题::\u长度。我最初认为这是因为_length是私有的,但是所有其他私有方法/变量都可以编译。我还需要保留这个.h文件,这样我就不能公开它了。任何帮助都将不胜感激 正如编译器所说:
\u length
不是静态成员变量。然而,通过提供它自己的定义,您将它视为一个整体。不要那样做只能这样定义静态成员变量。
数据也是如此
顺便说一下,如果必须定义char*
变量,那么这是错误的:
char String::*data;
这是对的:
char* String::data;
尽管有词汇语法产生的奇怪之处(从C继承),但*
是类型的一部分,而不是名称。您不需要:int String:\u length代码>用于非静态成员变量。发布代码时,请不要包含行号(这会使复制代码以供自己尝试变得困难)。相反,使用注释来标记错误所在的行。那么,我应该只在构造函数中定义它吗?此外,已适当注意到。我会编辑这个问题。你用哪本书来学习C++?