Простой шаблонный класс с перегруженным тегом < < сбой оператора, & ldquo; Неправильное использование идентификатора шаблона & rdquo;

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

В верхней части контроллера после импорта:

import {
  Controller,
  Get,
  Post,
  Patch,
  Delete,
  HttpException,
  HttpStatus,
  Body,
  Req,
  HttpCode,
  Param, Query
} from '@nestjs/common';
import { EnrolleesService } from './enrollees.service';
import { Enrollees } from './enrollees.entity';

@Controller('api/enrollee')  // /enrollee is the route
export class EnrolleeController {
  constructor(private readonly EnrolleeService: EnrolleeService) {}

Добавление элемент, пользователь, что угодно в контроллере:

@Post()
  async addItem(@Req() req, @Body() recordData): Promise<Enrollees> {

    const result: Enrollees = await this.EnrolleesService.addItem(recordData);
    if (!result)
      throw new HttpException('Error adding new Enrollee', HttpStatus.BAD_REQUEST);
    return result;
  }

В службе:

import { Injectable } from '@nestjs/common';
import { InjectRepository } from '@nestjs/typeorm';
import { Repository, getManager, getRepository } from 'typeorm';
import { Enrollees } from './enrollees.entity';


@Injectable()
export class EnrolleesService {

  private entityManager = getManager();

  constructor(
    @InjectRepository(Enrollees)
    private readonly enrolleesRepository: Repository<Enrollees>
  ) {}
async addItem(recordData): Promise<Enrollees> {
    return await this.enrolleesRepository.save(recordData);
  }
0
задан Stef 18 January 2019 в 23:32
поделиться

2 ответа

Возможно, проблема в том, что вы пытаетесь перегрузить не оператор "< <", а оператор "< < <>"

Из файла .h замените [ 113]

 friend std::ostream &operator<< <>(std::ostream &os, messageTemplate<A> &aTemplate);

с

  friend std::ostream &operator<< (std::ostream &os, messageTemplate<A> &aTemplate);
0
ответ дан Daniel 18 January 2019 в 23:32
поделиться

Я вижу две проблемы:

1) объявление перегруженной функции для оператора < < содержит символы <>, которые вызывают сбой компиляции. Это можно исправить, удалив <>

2) определение перегруженной функции для оператора < < (и класс ctor) существует в исходном файле, что вызывает сбой компоновщика. Это можно исправить, переместив эти определения из исходного файла в файл заголовка.

Попробуйте использовать следующие заголовочные и исходные файлы, это работает для меня ...

template.h

#pragma once

#include <iostream>
#include <string>


//class must be forward declared because it contains a friend function template
template<class T> class messageTemplate;

//friend function also must be forwards declared
template<class A> std::ostream &operator<<(std::ostream &os, messageTemplate<A> &aTemplate);

template <class T>
class messageTemplate {
public:
    messageTemplate(const std::string &topic, T data);

    template <class A>
    friend std::ostream &operator<<(std::ostream &os, messageTemplate<A> &aTemplate);

private:
    std::string topic;
    T data;
};

template<class T>
messageTemplate<T>::messageTemplate(const std::string &topic, T data):topic(topic), data(data) {};

template <class T>
std::ostream &operator<< (std::ostream &os, messageTemplate<T> &aTemplate) {
    os << "topic: " << aTemplate.topic << " data: " << aTemplate.data;
    return os;
};

main.cpp

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

using namespace std;

int main()
{
    messageTemplate< int > test{ "test", 69 };

    cout << test << endl;

    return 0;
}

Выход консоли: [1111 ]

topic: test data: 69

Process finished with exit code 0
0
ответ дан claytonjwong 18 January 2019 в 23:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: