首页 > 解决方案 > 问题:我想执行一个代码,但它的一部分在另一个文件夹中

问题描述

下面的代码是 21Templates.cpp

#include <iostream>

#include "Stack.h"

#include <string>

using namespace std;

int main(int argc, char* argv[]){

    Stack<string> p(100);

    p.push("python");
    p.push("haskell");
    p.push("C++");

    //p.desempilhar();
    if(p.isEmpty())
        cout << "Pilha vazia!\n";
    else
        cout << "Pilha NAO vazia!\n";
    if(!p.isEmpty())
        cout << "Topo: " << p.peek() << endl;
    else
        cout << "A pilha esta vazia!!\n";
    return 0;
}

下面的代码是 Stack.h:

#ifndef __STACK_H_
#define __STACK_H_
#include <iostream>

using namespace std;

/*
    Declarando a criação de um template para classe Stack.
    Stack aqui é um template, não uma classe propriamente dita.
    Ao ser declarada da maneira correta se torna uma classe de fato.
*/
template <class T>
class Stack {
    private:
        int top;
        T* a;
        int MAX;

    public:
        Stack(int MAX);
        bool push(T x); //Adiciona um T a stack.
        bool pop(); //Remove o T mais acima da stack.
        int peek(); //Retorna o T mais acima da stack.
        bool isEmpty(); 
};

//Declarando uso de um template. template <class T>
template <class T>
//"Stack<T>" é uma classe baseada no "template <class T>".
Stack<T>::Stack(int MAX){
    a = new T(MAX);
    top = -1;
    this->MAX = MAX;
}

//Declarando uso de um template. template <class T>
template <class T>
//"Stack<T>" é uma classe baseada no "template <class T>".
bool Stack<T>::push(T x) {
    if (top >= (MAX - 1)) { 
        cout << "Stack Overflow" << endl;
        return false; 
    } else { 
        a[++top] = x; 
        cout << x << " pushed into stack" << endl; 
        return true; 
    } 
} 

//Declarando uso de um template.
template <class T>
//"Stack<T>" é uma classe baseada no "template <class T>".
bool Stack<T>::pop() {
    if (top < 0) { 
        cout << "Stack Underflow" << endl; 
        return false; 
    } 
    else {
        cout << a[top--] << " Popped from stack" << endl;
        return true;
    } 
} 

//Declarando uso de um template.
template <class T>
//"Stack<T>" é uma classe baseada no "template <class T>".
int Stack<T>::peek() { 
    if (top < 0) { 
        cout << "Stack is Empty" << endl;
        return 0; 
    } else { 
        return a[top];
    } 
} 

//Declarando uso de um template.
template <class T>
//"Stack<T>" é uma <<classe baseada no "template <class T>".
bool Stack<T>::isEmpty() {
    return (top < 0);
}

#endif

好吧,一部分代码在:home/matheus/Codes/C++/Aulas,另一部分在:home/matheus/Codes/C++/EstruturaDeDados。

我正在尝试用以下方式编译它:g++ -o 21Templates 21Templates.cpp /home/matheus/Codes/C++/EstruturaDeDados/Stack.h

(请记住,我已经在 home/matheus/Codes/C++/Aulas 中打开了 cmd,其中 21Templates.cpp 所在的位置。)

我如何在不收到错误的情况下执行此操作:

21Templates.cpp:2:10:致命错误:Stack.h:存档或目录不存在

#include “堆栈.h”

       ^~~~~~~~~

编译终止。

???

标签: c++

解决方案


由于您在代码中执行此操作,因此必须在编译时使用该选项#include "Stack.h"添加您放置的目录:Stack.h-I

g++ -I /home/matheus/Codes/C++/EstruturaDeDados -o 21Templates 21Templates.cpp

推荐阅读