C ++中的类和标头

时间:2015-03-27 18:59:08

标签: c++ xcode class header-files

为什么Xcode会给我“重新定义控制台”错误? 标题和cpp中的名称不应该相同吗?

以下是代码:

ui.cpp:

#include "ui.h"
    class Console {
    public:
    void run() {
        puts("Hello my friend!");

    }
};

ui.h:

class Console {
public:
    void run();
};

main.cpp中:

#include <iostream>
#include "ui.h"

int main(int argc, const char * argv[]) {
    Console c;
    c.run();
return 0;
}

3 个答案:

答案 0 :(得分:3)

  

标题和cpp中的名称不应该相同吗?

不,.cpp文件应该具有实现,而不是声明。这看起来像是:

#include "ui.h"

void Console::run() {
    puts("Hello my friend!");
}

请注意,您的.h文件中也可能include guards,以防止它们被多次包含。

答案 1 :(得分:2)

类在头文件中定义。 .cpp应该包含函数的实现,而不是类定义。

ui.cpp应该是:

#include <stdio.h>    /* for puts */
#include "ui.h"

void Console::run() {
    puts("Hello my friend!");
}

如果您正在学习C ++,请尝试使用http://www.learncpp.com/等教程。

答案 2 :(得分:0)

因为你重新定义了它。字面上就在你的代码中。

要定义其成员函数之一,只需执行 ,而不重复类的定义:

#include "ui.h"

void Console::run()
{
   puts("Hello my friend!");
}