0
Я создал проект Calculator
в формах Windows. Также у меня есть логика моего калькулятора в другом файле cpp logic.cpp
.Невозможно включить файлы в проект Windows Forms
Проблема: Я не могу включить файлы logic.cpp
и <msclr\marshal_cppstd.h>
в Calculator.h
.
Также я могу включить logic.cpp
, когда этот файл не содержит других.
Вот код: calculator.h
#pragma once
#include "E:\november\CalculatorForm\CalculatorForm\logic.cpp"
#include <msclr\marshal_cppstd.h>
namespace CalculatorForm {
using namespace System;
using namespace System::ComponentModel;
using namespace System::Collections;
using namespace System::Windows::Forms;
using namespace System::Data;
using namespace System::Drawing;
...
}
logic.cpp
using namespace std;
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
bool isMultiplicationOrDevision(char c) {
if (c == '*' || c == '/')return true;
return false;
}
bool isSumOrSubtraction(char c) {
if (c == '+' || c == '-')return true;
return false;
}
double doOp(char c, double a, double b) {
switch (c)
{
case '*':
return a*b;
case '/':
if (!b) {
return 0;
}
return a/b;
case '+':
return a + b;
case '-':
return a - b;
default:
return 0;
}
}
class Expression {
private:
vector<double> values;
vector<char> operators;
public:
Expression(string expr) {
string t;
for each (char c in expr)
{
if (c == '+' || c == '-' || c == '/' || c == '*') {
values.push_back(stod(t));
t.clear();
operators.push_back(c);
}
else {
t += c;
}
}
values.push_back(stod(t));
}
Expression(vector<double> values, vector<char> operators) {
this->values = values;
this->operators = operators;
}
double getResult() {
auto i = find_if(operators.begin(), operators.end(), isMultiplicationOrDevision);
while (i != operators.end()) {
doOperation(i);
i = find_if(operators.begin(), operators.end(), isMultiplicationOrDevision);
}
i = find_if(operators.begin(), operators.end(), isSumOrSubtraction);
while (i != operators.end()) {
doOperation(i);
i = find_if(operators.begin(), operators.end(), isSumOrSubtraction);
}
return values[0];
}
private:
void doOperation(vector<char>::iterator i) {
int index = distance(operators.begin(), i);
double t = doOp(operators[index], values[index], values[index + 1]);
operators.erase(i);
values.erase(values.begin() + index);
values[index] = t;
}
};
string checkForBrackets(string s) {
for (auto i = s.begin(); i < s.end(); i++) {
string::iterator start;
if (*i == '(') {
int dist = distance(s.begin(), i);
string t(i, s.end());
t.erase(t.begin());
string temp(s.begin(), i);
s = temp + checkForBrackets(t);
i = s.begin();
advance(i, dist);
}
if (*i == ')') {
i = s.erase(i);
string t(s.begin(), i);
Expression e(t);
double res = e.getResult();
s.erase(s.begin(), i);
s = to_string(res) + s;
return s;
}
}
return s;
}
string doCalculating(string t) {
t = checkForBrackets(t);
Expression a(t);
t = to_string(a.getResult());
return t;
}
Вы не должны включать файлы '* .cpp'. – MikeCAT
Как @MikeCAT сказал, что вы не должны включать файлы .cpp. Вы должны создать файл заголовка (.h), который содержит определения функций в вашем .cpp-файле и включать этот файл заголовка в другие файлы. – laltin