2014-10-12 20 views
-2

這裏是我的代碼,即時嘗試做我自己的字符串類,但我卡在這裏...我的老師不好:/我有這麼多的錯誤,但我想知道爲什麼這個錯誤出現 「無效preprocesing指令#ifndef_CADENA_H」錯誤,而編程使用標題的C++

#include <iostream> 
 
#include <cstdlib> 
 
#ifndef_CADENA_H 
 
#define_CADENA_H 
 
    class cadena { 
 
\t \t char* Ptrcad; 
 
\t \t int tam; 
 
\t \t 
 
\t \t public : 
 
\t \t \t 
 
\t \t cadena(void); 
 
\t \t char* get(void); 
 
\t \t void set(*char**) 
 
\t \t int longitud; 
 
\t \t ~ Cadena (void); 
 
\t }; 
 
\t Cadena :: Cadena(){ 
 
\t \t Ptrcad = NULL; 
 
\t \t tam = 0; 
 
\t } 
 
\t char* Cadena :: get(){ 
 
\t \t return Ptrcad; 
 
\t } 
 
\t void Cadena :: set(const char* x){ 
 
\t \t while(*(x+tam)!='\0'){ 
 
\t \t \t tam++; 
 
\t \t } 
 
\t \t Ptrcad = new char (tam); 
 
\t \t for(int i=0;i<tam;i++){ 
 
\t \t \t *(Ptrcad +i)= *(x+i); 
 
\t \t } 
 
\t } 
 

 
int Cadena :: longitud(){ 
 
\t return tam; 
 
} 
 
\t Cadena :: ~ Cadena(){ 
 
\t \t delete [] Ptrcad; 
 
\t \t tam =0; 
 
\t }

+2

你需要在'#ifndef'和'_CADENA_H'之間有一個空格(類似的用#define ')。你也應該避免以'_'開頭的名字;他們基本上是爲執行而保留的 - 這意味着你可能會遇到問題,這將是你的錯,而不是別人的錯。 – 2014-10-12 04:48:07

+2

1)切換到'#ifndef _CADENA_H'(確保有空格),2)也切換到'#define _CADENA_H'(同樣的問題),3)確保你有一個'#endif',後跟一個空行,在你的頭文件的末尾。 – FoggyDay 2014-10-12 04:50:30

+0

@FoggyDay:'#endif'後面的空行不是必需的。 – 2014-10-12 04:56:21

回答

2

因爲下劃線相信的。它應該是#ifndef CADENA_H#define CADENA_H。除非你想在名稱中保留下劃線(在這種情況下不推薦使用下劃線),那麼它應該是#ifndef _CADENA_H#define _CADENA_H

+1

不,下劃線對於「頭球衛隊」來說是一個很好的約定。問題是*必須是空格*。 – FoggyDay 2014-10-12 04:55:42

+0

@FoggyDay不,不是。所有以大寫字母開頭並以下劃線開頭的字母都是C++中的保留標識符。 (另外:所有有雙下劃線的東西都會被保留。) – Csq 2014-10-12 07:45:08