我在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
希望你知道我做错了什么,欢迎任何想法。
答案 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文件。相反,只需在编译时在命令行中列出它们。