Error defining an unnamed structure in c++

  anonymous, c++, cmake, struct

I’m having a problem with my code, even my professor has no idea why this is the case.

He wants me to define the structure with using Persontype= struct{}; and not a normal definition of a structure. I don’t understand why or what is the difference.

he also don’t want us to include the .cpp file in main.

Normal definition of a struct works fine but not with this.

the error

In file included from ...LABOR1TESTmain.cpp:3:
...LABOR1TESTtest.hpp:12:6: warning: 'void test(const std::vector<<unnamed struct> >&)' used but never defined
 void test(std::vector<PersonType> const &_Personen);
      ^~~~
[100%] Linking CXX executable LABOR1TEST.exe
CMakeFilesLABOR1TEST.dir/objects.a(main.cpp.obj): In function `main':
.../LABOR1TEST/main.cpp:12: undefined reference to `test(std::vector<._56, std::allocator<._56> > const&)'
collect2.exe: error: ld returned 1 exit status
mingw32-make.exe[3]: *** [CMakeFilesLABOR1TEST.dirbuild.make:120: LABOR1TEST.exe] Error 1
mingw32-make.exe[2]: *** [CMakeFilesMakefile2:95: CMakeFiles/LABOR1TEST.dir/all] Error 2
mingw32-make.exe[1]: *** [CMakeFilesMakefile2:102: CMakeFiles/LABOR1TEST.dir/rule] Error 2
mingw32-make.exe: *** [Makefile:137: LABOR1TEST] Error 2

here is my code

main.cpp

#include <iostream>
#include <vector>
#include "test.hpp"

int main() {

    PersonType p;
    p.Name = "Max";
    std::vector<PersonType> TEMPVEC;
    TEMPVEC.push_back(p);
    TEMPVEC.push_back(p);
    test (TEMPVEC);
    return 0;
}

test.cpp

#include <iostream>
#include <vector>
#include <string>
#include "test.hpp"
void test(std::vector<PersonType> const &_Personen)
{
    for (auto const  &i : _Personen)
    {
    std::cout << i.Name << std::endl;
    }
}

and my test.hpp

#include <vector>
#include <string>
#ifndef LABOR1TEST_TEST_HPP
#define LABOR1TEST_TEST_HPP

using PersonType = struct {
    std::string Name;
};
void test(std::vector<PersonType> const &_Personen);
#endif //LABOR1TEST_TEST_HPP

CMakeLists.txt

cmake_minimum_required(VERSION 3.17)
project(LABOR1TEST)

set(CMAKE_C++_STANDARD 11)

add_executable(LABOR1TEST main.cpp test.cpp test.hpp)

Source: Windows Questions C++

LEAVE A COMMENT