Ошибка множественного определения для функции класса - PullRequest
1 голос
/ 23 апреля 2020

Я работаю над программой, чтобы проверить, является ли введенная пользователем строка палиндромом или не использует стеки и очереди. Это всего лишь тест, чтобы убедиться, что моя функция проходит правильно. Я сохраняю эту ошибку множественного определения, хотя. Я попытался переименовать мои переменные и мою функцию, но продолжает появляться та же ошибка.

Makefile, созданный компилятором:

# Project: P5
# Makefile created by Dev-C++ 5.11

CPP      = g++.exe
CC       = gcc.exe
WINDRES  = windres.exe
OBJ      = main.o Palindrome.o
LINKOBJ  = main.o Palindrome.o
LIBS     = -L"C:/Program Files (x86)/Dev-Cpp/MinGW64/lib" -L"C:/Program Files (x86)/Dev-Cpp/MinGW64/x86_64-w64-mingw32/lib" -static-libgcc
INCS     = -I"C:/Program Files (x86)/Dev-Cpp/MinGW64/include" -I"C:/Program Files (x86)/Dev-Cpp/MinGW64/x86_64-w64-mingw32/include" -I"C:/Program Files (x86)/Dev-Cpp/MinGW64/lib/gcc/x86_64-w64-mingw32/4.9.2/include"
CXXINCS  = -I"C:/Program Files (x86)/Dev-Cpp/MinGW64/include" -I"C:/Program Files (x86)/Dev-Cpp/MinGW64/x86_64-w64-mingw32/include" -I"C:/Program Files (x86)/Dev-Cpp/MinGW64/lib/gcc/x86_64-w64-mingw32/4.9.2/include" -I"C:/Program Files (x86)/Dev-Cpp/MinGW64/lib/gcc/x86_64-w64-mingw32/4.9.2/include/c++"
BIN      = P5.exe
CXXFLAGS = $(CXXINCS) 
CFLAGS   = $(INCS) 
RM       = rm.exe -f

.PHONY: all all-before all-after clean clean-custom

all: all-before $(BIN) all-after

clean: clean-custom
    ${RM} $(OBJ) $(BIN)

$(BIN): $(OBJ)
    $(CPP) $(LINKOBJ) -o $(BIN) $(LIBS)

main.o: main.cpp
    $(CPP) -c main.cpp -o main.o $(CXXFLAGS)

Palindrome.o: Palindrome.c
    $(CPP) -c Palindrome.c -o Palindrome.o $(CXXFLAGS)

Сообщения об ошибках:

C:\Users\me\Downloads\school\CSC\260\Palindrome.o   Palindrome.c:(.text+0x0): multiple definition of `TestPal::isPalindrome(std::string)'
C:\Users\me\Downloads\school\CSC\260\main.o main.cpp:(.text+0x0): first defined here
C:\Users\me\Downloads\school\CSC\260\Palindrome.o   Palindrome.c:(.text+0x2e): multiple definition of `TestPal::TestPal()'
C:\Users\me\Downloads\school\CSC\260\main.o main.cpp:(.text+0x2e): first defined here
C:\Users\me\Downloads\school\CSC\260\Palindrome.o   Palindrome.c:(.text+0x2e): multiple definition of `TestPal::TestPal()'
C:\Users\me\Downloads\school\CSC\260\main.o main.cpp:(.text+0x2e): first defined here
C:\Users\me\Downloads\school\CSC\260\collect2.exe   [Error] ld returned 1 exit status
25      C:\Users\me\Downloads\school\CSC\260\Makefile.win   recipe for target 'P5.exe' failed

Main:

#include <iostream>
#include "stack"
#include "queue"
#include "Palindrome.c"
using namespace std;

int main()
{
    string Pal;
    cout << "Enter a palindrome: ";
    getline (cin, Pal);

    TestPal test;
    test.isPalindrome(Pal);


    return 0;
}

Palindrome.h

#ifndef PALINDROME_H
#define PALINDROME_H
#include <iostream>
#include <string>
using namespace std;

class TestPal
{
    public: 
        bool isPalindrome(string);
        TestPal();

};

#endif

Палиндром. c

#include "Palindrome.h"
#include "stack"
#include "queue"
#include <iostream>
#include <string>
using namespace std;

bool TestPal::isPalindrome(string Pal)
{

    cout << Pal;
    return false;
};

TestPal::TestPal()
{

};

1 Ответ

2 голосов
/ 23 апреля 2020

Строка #include "Palindrome.c" - это проблема, вы импортируете реализацию, что является огромной проблемой для компиляции.

Это должно быть:

#include "Palindrome.h"

Если только вы Вы делаете что-то действительно странное, никогда не включайте .c файлов. Придерживайтесь только .h (или .hpp, если хотите).

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