对象创建错误

时间:2015-05-15 18:24:13

标签: c++ oop

我是一个完整的c ++ noob。开始从java学习它。因此,在经过一些教程的深入研究后,我最终得到了这个名为Token的类:

#include "Token.h"
#include <iostream>
using namespace std;
//int Token::frequency = 0;



Token::Token() {
    // TODO Auto-generated constructor stub
    frequency=0;
    tok = "hey i am created";
    cout << tok << endl; // prints !!!Hello World!!!

}

Token::~Token() {
    // TODO Auto-generated destructor stub
}

这个类的标题是:

#ifndef TOKEN_H_
#define TOKEN_H_
#include <string>

class Token {
    std::string tok;
    int frequency;
public:
    Token();
    virtual ~Token();
};

#endif /* TOKEN_H_ */

在教程中看起来很好。错误是我在我的主类中调用它时:

#ifndef TOKEN_H_
#define TOKEN_H_
#include <iostream>
using namespace std;

int main() {
    Token myToken;
    cout << "!!!Hello World!!!" << endl; // prints !!!Hello World!!!
    return 0;
}
#endif /* TOKEN_H_ */

错误说:

  

Tokenizer.cpp:15:8:错误:'myToken'之前预期';'

Whyyy?我在这里查看了教程和答案,看起来我做得对吗?到底是怎么回事?而且,如果你看到我做了一些其他废话,请告诉我,我会感激,我刚从Java转到C ++ ...

4 个答案:

答案 0 :(得分:6)

#ifndef TOKEN_H_函数周围有main,这没有任何意义。 #ifndef被称为标头保护,它用于保护标头不被多次包含。您的主要功能应该进入源文件(.c或.cpp等)。您不需要源文件中的标题保护,因为它们不包含在其他源文件中。

你需要你的main.cpp文件是这样的:

#include <iostream>
#include "token.h"
// other stuff, like the using namespace

int main() { /* then your main function. */ }

实际上,大多数源文件都遵循这种模式。这与构建Token.cpp文件的模式相同。

答案 1 :(得分:4)

您需要包含班级的实际标题

#include "Token.h"

这样,类定义可用,您可以在Token

中声明main的实例

这些是标题/包含警卫,您在主文件中不需要它们

#ifndef TOKEN_H_
#define TOKEN_H_

答案 2 :(得分:1)

您没有包含令牌标头#include "token.h",因此,编译器认为Token myToken;是定义而不是声明,也不需要标头保护

答案 3 :(得分:0)

从main.c文件中删除Token.h警卫。还包括main中的 var res = query.GroupBy( b => b.CreatedDate.ToString() ).Select(c => new { ShredQueueCount = c.Sum(w => w.ShredQueueCount), ShredCompletedCount = c.Sum(w => w.ShredCompletedCount), ShredValFailureCount = c.Sum(w => w.ShredValFailureCount), ShredExceptionCount = c.Sum(w => w.ShredExceptionCount), CreatedDate = c.Select(w => w.CreatedDate) }); 标题。