Что-то странное происходит в Xcode - PullRequest
1 голос
/ 30 апреля 2020

Итак, я начал реализовывать граф на С ++. Граф имеет ребра - исходный узел - узел назначения (если он направлен)

Поэтому я создал структуру

struct Edge {
   int src, destin;

};

позже, хотя я решил изменить структуру Edge на строки

struct Edge {
   string src, destin;
};

после того, как я это сделал, хотя я не смог присвоить эти переменные строкам.

в моей функции main () у меня есть

#include "graph.h"
int main() {

    Edge e;
    //e.src = 0 // use to be this
    e.src = "P2" //this is an assignemnt error. it wants an int and is getting a char[3]

    return 0;
}

Xcode expects an int but it should be a string

ЗДЕСЬ ВСЕ КОД:

#include "graph.h"

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

    int num_p;
    int num_r;
    vector<int> num_of_units;


    Edge e;

    vector<Edge> edges;


    e.src = "P2";







//    e.src = 0;
//    e.destin = 29;
//    edges.push_back(e);



    return 0;

}

Graph.h ниже

#ifndef graph_h
#define graph_h

#include <stdlib.h>
#include <iostream>
#include <fstream>
#include <string>
#include <sstream>
#include <vector>
using namespace std;


struct Edge {
    string src;
    string destin;
};


class Graph {

public:
    //adj matrix
    vector<vector<string > >adjL;






    //constructor
    Graph(vector<Edge> edges, int n){


        adjL.resize(n);


//        adjL.push_back(edges);

        //adding edges
        for(int i = 0; i < edges.size(); i++)
        {
            vector<string> temp;
            temp.push_back(edges[i].src);
            temp.push_back(edges[i].destin);
            adjL.push_back(temp);
        }



    }




};


void printG(Graph graph, int n);







#endif

То, что я уже пробовал: - Очистить - Перезапустить Xcode - Перезапустить Ma c

РЕДАКТИРОВАТЬ: я думаю, что я понял это ! в основном я начал кодировать это с vim. Позже я решил, что после того, как у меня было создано несколько файлов, я хотел бы перейти на IDE, иначе Xcode. Когда я пошел, чтобы добавить все файлы, некоторые из них были связаны со старыми, а некоторые были созданы для проекта xcode. поэтому я изменил бы код в файле, который был в xcode, но я не менял файл, который xcode фактически использовал бы для запуска. он будет использовать другой файл с тем же именем.

1 Ответ

0 голосов
/ 30 апреля 2020

Повторное объявление одинаковых имен для разных типов данных в одной и той же области действия не разрешено в C ++. Вы можете использовать класс с перегрузкой конструктора и получить желаемый результат. Посмотрите на следующее:

#include <iostream>

class Edges
{
    std::string src, destin;
    int srcInt, destinInt;

public:
    Edges(std::string s1, std::string s2)
    {
        src = s1;
        destin = s2;

        std::cout << "src: " << src << " destin: " << destin << std::endl;
    }
    Edges(int s1, int s2)
    {
        srcInt = s1;
        destinInt = s2;

        std::cout << "src: " << srcInt << " destin: " << destinInt << std::endl;
    }
};

int main(void)
{
    Edges e0(123, 321);
    Edges e1("hello", "world");

    return 0;
}

Вывод:

src: 123 destin: 321
src: hello destin: world

Надеюсь, это поможет вам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...