Почему эта ссылка C ++ не работает? (OSX Mavericks)

0

Я изучаю C++. Я попытался связать отдельные файлы, пытаясь создать класс в отдельном файле.

Когда я создаю и запускаю программу, я получаю это сообщение об ошибке:

Неопределенные символы для архитектуры x86_64: "Sally :: printCrap()", на которые ссылаются: _main в Main-8bfa94.o "Sally :: Sally()", на которые ссылаются: _main в Main-8bfa94.o ld: symbol (s) не найден для архитектуры x86_64 clang: ошибка: команда компоновщика не удалась с кодом выхода 1 (используйте -v, чтобы увидеть вызов) [Закончено в 0,3 с кодом выхода 1]

Вот мой код:

main.cpp

#include <iostream>
#include <string>

#include "Sally.h"

using namespace std;

int main()
{
    Sally sallyObject;
    Sally *sallyPointer = &sallyObject;

    sallyObject.printCrap();
    sallyPointer->printCrap();
}

Sally.h

#ifndef SALLY_H
#define SALLY_H

class Sally
{
public:
    Sally();
    void printCrap();
};

#endif

Sally.cpp

#include "Sally.h"
#include <iostream>

using namespace std;

Sally::Sally()
{

}

void Sally::printCrap(){
    cout << "Crap \n";
};

Любая помощь будет принята с благодарностью!

  • 1
    Как вы компилируете программу? Можете ли вы опубликовать команду, которую вы используете? Я предполагаю, что вы не компилируете Sally.cpp (и поэтому не связываете его). Попробуйте g++ main.cpp a.cpp
Теги:
macos

1 ответ

3
Лучший ответ

Просто запустите приложение терминала OS X, затем введите

cd "/Users/BEASTMACHIENEjr/Desktop/C++ Файлы", чтобы перейти в эту папку, затем введите g++ Main.cpp Sally.cpp. Это приведет к созданию файла с именем a.out, который затем можно запустить, набрав. /a.out

PS: если вы используете Sublime Text, я рекомендую создать Makefile чтобы вы могли скомпилировать код, связанный с несколькими исходными файлами.

  • 0
    Рассказывает, как мало я знаю о C ++. Я подумал, что компилятор будет смотреть на #include и засасывать необходимые файлы.
  • 2
    @RobertHarvey, нет, это не похоже на Java . В C++ #include - это директива препроцессора, которая слепо вставляет текст из включенного файла, не более того. С добавлением модулей (когда-нибудь, возможно, в недалеком будущем) все должно стать более приправленным 21-м веком.
Показать ещё 12 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню