2015-12-06 4 views
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; 
} 
+0

Вы не должны включать файлы '* .cpp'. – MikeCAT

+0

Как @MikeCAT сказал, что вы не должны включать файлы .cpp. Вы должны создать файл заголовка (.h), который содержит определения функций в вашем .cpp-файле и включать этот файл заголовка в другие файлы. – laltin

ответ

0

включают .h файлы в ваших файлов .cpp и добавить включают охрану, чтобы предотвратить переменные и функции от переопределения

Смежные вопросы