Статический метод в C ++ "Интерфейс" - PullRequest
1 голос
/ 21 декабря 2011

У меня есть класс C ++ «Интерфейс», и я получаю следующую ошибку при попытке компиляции:

    Undefined symbols for architecture x86_64:
      "Serializable::writeString(std::ostream&, std::string)", referenced from:
          Person::writeObject(std::ostream&) in Person.o
          Artist::writeObject(std::ostream&) in Artist.o
      "Serializable::readString(std::istream&)", referenced from:
          Person::readObject(std::istream&) in Person.o
          Artist::readObject(std::istream&) in Artist.o
      ld: symbol(s) not found for architecture x86_64

clang: error: linker command failed with exit code 1 (use -v to see invocation)

Возможно ли реализовать статический метод в абстрактном классе?

Моя реализация выглядит следующим образом.

.h Файл

#ifndef Ex04_Serializable_h
#define Ex04_Serializable_h

using namespace std;

class Serializable {

public:
    virtual void writeObject(ostream &out) = 0;
    virtual void readObject(istream &in) = 0;

    static void writeString(ostream &out, string str);
    static string readString(istream &in);
};

#endif

.cpp Файл

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

using namespace std;

static void writeString(ostream &out, string str) {

    int length = str.length();

    // write string length first
    out.write((char*) &length, sizeof(int));

    // write string itself
    out.write((char*) str.c_str(), length);
}

static string readString(istream &in) {

    int length;
    string s;

    // read string length first
    in.read((char*) &length, sizeof(int));
    s.resize(length);

    // read string itself
    in.read((char*) s.c_str(), length);
    return s;
}

1 Ответ

7 голосов
/ 21 декабря 2011

try:

void Serializable::writeString (...) {
 // ...
}

(попробуйте без статики и добавьте имя класса)

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