Программа на C ++ не может правильно скомпилироваться с использованием CMD, как в VSC - PullRequest
0 голосов
/ 19 апреля 2020

Программа, которую я пишу, успешно работает на коде Visual Studio IDE. Однако, при попытке использовать клиент Bitvise S SH для запуска моей программы, я получаю список ошибок, для которых я сам не могу понять проблему. Bitvise это еще один способ доступа к клиенту CMD с удаленного сервера, для всех интенсивных целей он действует так же, как windows CMD. Я предоставлю снимок экрана с сообщениями об ошибках и полный список частей моей программы, которые, по моему мнению, вызывают ошибки. Если вам нужен какой-либо дополнительный код, пожалуйста, не стесняйтесь спрашивать.

экранный колпачок ошибок

enter image description here

В этом отчете об ошибках показана распространенная ошибка, которая является заполнителем для всех экземпляров.

multiple definition of `something' /tmp/ccBhjFYn.o:(.bss+0x0): first defined here

Эта ошибка НЕ ​​возникает в коде Visual Studio

Из этого сообщения об ошибке видно, что проблема обнаружена в драйвере. cpp и в моем файле header.h. По этой причине я не буду предоставлять минимальный код для этих файлов, но они достаточно малы, чтобы не требовать их.

ГЛАВНАЯ

int main()
{
    Customer c;
    Part p;
    Builder b;
    const string fileName = "Parts.txt";

    auto partsVec =  readpartFile();
    auto customerVec = readcustomerFile();
    auto builderVec = readbuilderFile();

    fexists(fileName);
    complexity(c, partsVec);
    robotComplexity(partsVec,customerVec);
    writeFile(buildAttempt(b, complexity(c, partsVec), variability(customerVec, builderVec)));


  return 0;
}

ФАЙЛ ГОЛОВКИ



#include <vector>
#include <string>


struct Customer {
std::string customerName;
std::string projectName;
std::string listofParts;
} myCustomer;

struct Part {
char partCode;
std::string partName;
int maximum;
int minimum;
int complexity;
} myPart;

struct Builder {
std::string builderName;
int ability;
int variability;
} myBuilder;


bool fexists(const std::string filename);

std::vector<Part> readpartFile();

std::vector<Customer> readcustomerFile();

std::vector<Builder> readbuilderFile();

float complexity(const Customer& c, const std::vector<Part>& parts);

void robotComplexity(const std::vector<Part>& vecB, const std::vector<Customer>& vecC);

double variability(const std::vector<Customer>& customerList, const std::vector<Builder>& builderList);

std::vector<double> buildAttempt(Builder b, double variaiblity, double complexityRobot);

void writeFile(std::vector<double> build);

Спасибо за любую помощь. Этот вопрос может быть трудным для понимания и понимания, но я старался изо всех сил. Любые предложения, которые помогут улучшить этот вопрос, приветствуются, но, пожалуйста, будьте дружелюбны:)

1 Ответ

1 голос
/ 19 апреля 2020

Это в header.h

struct Customer {
std::string customerName;
std::string projectName;
std::string listofParts;
} myCustomer;

Это определение глобальной переменной myCustomer. Как таковой, он не принадлежит файлу заголовка.

Измените файл заголовка на этот

struct Customer {
std::string customerName;
std::string projectName;
std::string listofParts;
};

extern Customer myCustomer; // global variable declaration

Затем к одному из ваших cpp файлов (я предлагаю implementation.cpp) добавьте это

Customer myCustomer; // global variable definition

Или вы можете просто полностью покончить с глобальными переменными (лучшее решение).

ПРИМЕЧАНИЕ В некоторых моих комментариях выше я сказал, что в вашем заголовочном файле есть объявления глобальных переменных. , Я имел в виду, что у вас в заголовочном файле есть глобальная переменная определений . Разница между определением и декларацией - вот что здесь важно. Хорошо помещать объявления в заголовочный файл, неправильно ставить определение. Извините за путаницу.

...