包含类文件后的错误消息(多个定义的符号)

时间:2017-01-20 13:57:01

标签: c++ class

我在linux铸币上使用g ++编译器。 我想要为神经网络制作一个类,我想要玩tic tac toe。 我的标题:

#ifndef tttAi
#define tttAi
#include <string>

class Synaps{
public:
    explicit Synaps(const std::string& n, double v);
    void add(double ad);
    void multi(double mu);
    void save();
    double read();
private:
    std::string name;
    double Syn_value;
};
#endif

我的职能是:

    #include "tttAi.h"
#include <fstream>
#include <string>

Synaps::Synaps(const std::string& n, double v)
:name(n), Syn_value(v){
}

void Synaps::add(double ad) { //change by addition
    Syn_value += ad;
}

void Synaps::multi(double multip) { //change by multiplication
    Syn_value *= multip;
}

double Synaps::read() {
    return Syn_value;
}

这就是我想要它做的事情:

#include <iostream>

#include "tttAi.h"
#include "tttAi.cpp"

int main() {
Synaps n1n6("n1n6", 75);
n1n6.multi(2);

std::cout << n1n6.read() << '\n';
/*Want it to just output the value of Syn_value Witch at
this point should be 150 if i have done everything right*/
}

使用的命令:g ++ -Wall -std = c ++ 14 * cpp

所以我想我会得到的只是150的consol输出但是在编译时我得到这个无尽的错误信息: enter image description here

希望你知道我做错了什么,欢迎任何想法。

3 个答案:

答案 0 :(得分:3)

您包含多次包含定义的cpp文件(即您不应该写

#include "tttAi.cpp"
你的main.cpp文件中的

因此违反了ODR - one definition rule

请记住,包含文件意味着在包含点复制该文件的内容(因此也会复制您的定义)。

答案 1 :(得分:1)

问题似乎是#include&#34; tttAi.cpp&#34;在你的main.cpp文件中。 你不应该包括cpp文件

答案 2 :(得分:0)

您不应该#include .cpp文件。相反,只需在编译时在命令行中列出它们。